{"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('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\t\t\t
\r\n\t\t\t
Por R$ {realty.FormattedPrice}
\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\tConsulte
\r\n\t\t\t\t\t{/if}\r\n\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{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{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\tNenhum imóvel encontrado.
\r\n\t\t\t\tExperiência e inovação em gestão imobiliária,
conte com nossos serviços especializados.
{vitrine.text}
\r\n\t\t\t\t\r\n\t\t\t\t{/if}\r\n\t\t\t{/each}\r\n\t\tSoluções em administração condominial promovendo assistência total no dia a dia do seu condomínio.
\r\n\t\t\tVenda ou alugue o seu imóvel com todo o apoio profissional para uma negociação excelente e segura.
\r\n\t\t\tCompre ou alugue o lugar ideal para você, contando com nossos especialistas, ofertas selecionadas e orientação constante.
\r\n\t\t\tSeu condomínio administrado por quem entende
do assunto, confira os benefícios.
Informações financeiras disponíveis no aplicativo
24 horas por dia.
Mais proteção para sua casa ou o seu negócio,
conheça as opções disponíveis.
E conheça os benefícios das nossas soluções para o seu condomínio.
\r\n\t\tPara facilitar a operação e organizar o
controle financeiro do seu condomínio.
Utilize no seu smartphone, tablet ou computador,
todos os serviços em um único lugar.
Visite o imóvel para alugar ou comprar sem sair de casa,
ou acesse o nosso catálogo completo de ofertas.
Selecione o que você procura, estamos prontos para auxiliar.
\r\n\t\tA 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\tEnvie os dados do seu imóvel, preenchendo o formulário abaixo.\r\n\t
\r\n\t{field.Title.toLowerCase()}{#if field.Value.toLowerCase() != \"sim\" && field.Value.toLowerCase() != \"1\"}: {field.Value}{/if}
\r\n\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\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$ {realty.FormattedPrice}
\r\n\t\t\t\t\t\t\t\t\tSob Consulta
\r\n\t\t\t\t\t\t\t\t\tR$ {realty.FormattedCondominiumValue}
\r\n\t\t\t\t\t\t\t\t\tR$ {realty.FormattedIPTUValue}
\r\n\t\t\t\t\t\t\t\t\tR$ {realty.FormattedFullPrice}
\r\n\t\t\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{realty.CurrentSpot.CurrentAddress}, {realty.CurrentSpot.Number}, {realty.CurrentSpot.Neighborhood}, {realty.CurrentSpot.City} - {realty.CurrentSpot.CurrentStateName}
\r\n\t\t\t\tNenhum imóvel encontrado.
\r\n\t\t\t\t\t\t\t\tDescreva o seu imóvel ideal e nossa equipe especializada e qualificada irá encontrá-lo para você!
\r\n\t\t\r\n\t\tEnvie sua solicitação pelo formulário abaixo.\r\n\t
\r\n\t{@html atendimentoSimples}
\r\n\t{@html enderecoSimples}
\r\n\tPara 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\tA determinação e a forma de lidar com nossos clientes faz a nossa empresa crescer com solidez e modernização.
\r\n\tCom 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\tDesde 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\tCom 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\tA 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\tOferecer 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\tAcreditamos 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\tConfira sua lista de imóveis favoritos.
\r\n\tVocê não tem nenhum imóvel marcado como favorito.
Envie sua lista de imóveis selecionados para a {$textSite}.
\r\n\t\tCompartilhe sua lista de imóveis com seus amigos, utilizando o formulário.
\r\n\t\tMas 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
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\tNossa equipe entrará em contato, caso identifique alguma oportunidade dentro de sua área de interesse.
\r\n\tQuer 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\tNossa equipe entrará em contato, caso identifique alguma oportunidade dentro de sua área de interesse.
\r\n\tEm caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.
\r\n\t \r\n\tConfira os tipos de garantias locatícias disponíveis e a o que é necessário em cada uma delas.
\r\n\tEm caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.
\r\n\t \r\nPara efetuar seu cadastro, preencha o formulário correspondente ao seu perfil abaixo:
\r\n\tEm caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.
\r\n\t \r\n\r\n{@html item.text}
\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\tEstamos 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\tConheça nossos diferenciais e como a Bona pode ajudar na administração da locação do seu imóvel.
\r\n\t\tAproveite todas estas vantagens e Anuncie seu imóvel hoje mesmo.
\r\n\t \r\n\r\nO endereço abaixo não existe na {$textSite}
\r\n\t{document.location.href}\r\n\r\n\t\tPessoa Física\r\n\t
\r\n\t\r\n\t\tPessoa Física\r\n\t
\r\n\t\r\n\t\tPessoa Jurídica\r\n\t
\r\n\tGanhe 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\tVocê que é síndico vai usufruir de inúmeras vantagens, tais como:
\r\n\tEm caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.
\r\n\t \r\nOlá, tudo bem?
\r\n\tEstamos 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\tA 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\tCOMO FUNCIONA?
\r\n\tVocê 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\tProcuramos 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
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\tUm abraço, equipe Bona Imóveis.
\r\n\r\n\tCliente 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\tBancos conveniados: Banco do Brasil, Banrisul, Bradesco, Itaú e Santander.
\r\n\tNa 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\tPara maiores informações acesse: bonaimoveis.com.br/administracao-condominios
\r\n\tSã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\tRecomendamos sempre que se houver alguma particularidade (lançamento em determinada conta, fundo de obras, por exemplo) que seja informado.
\r\n\tSe 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\tPara que haja organização interna, solicitamos a atenção quanto à programação e prazos para pagamentos:
\r\n\tCom 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\tSe 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\tAtençã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\tApó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\tA 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\tTendo 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\tTodo 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\tO 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\tO 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É 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\tPró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\tO 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\tPara 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\tSim, 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\tEm 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\tNa 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\tO 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\tO 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\tApó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\tSerá 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É 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\tAs 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\tO contrato de trabalho deve ser completo e especificar, de forma clara e indiscutível, as atribuições do empregado.
\r\n\tA 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\tNas 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\tOrientamos 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\tPara 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\tOrientamos 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\tOs funcionários que exercerem atividades insalubres receberão o percentual definido no PPRA (normalmente 20% s/salário mínimo).
\r\n\tAtençã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\tO 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\tA contribuição sindical é facultativa, e poderá ser paga desde que prévia e expressamente autorizada pelo condomínio.
\r\n\tSã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\tO 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É 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É 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É 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É 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\tEm 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\tConectividade 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\tO 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\tAs 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\tCertificado 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\tDesde 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\tNa esfera municipal, algumas prefeituras já vincularam o acesso ao sistema das notas fiscais eletrônicas através do certificado digital.
\r\n\tMuito 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\tO 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\tPara isso é essencial que o condomínio tenha a assinatura eletrônica. Segue algumas práticas com o Certificado Digital:
\r\n\tAs 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\tAs férias deverão ser pagas até 2 dias antes do inicio do respectivo período de férias.
\r\n\tOrientamos 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\tTambé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\tO auxilio doença e/ou acidente são benefícios concedidos ao empregado incapacitado por mais de 15 dias junto ao INSS.
\r\n\tAtençã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\tOs 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\tA 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\nCom 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\tOs 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\tA 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\tEm caso de dúvidas, entre em contato conosco, nossa equipe está à disposição para auxiliar.
\r\n\t \r\nValorizamos 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