{"id":152,"date":"2025-11-13T22:46:24","date_gmt":"2025-11-13T22:46:24","guid":{"rendered":"https:\/\/ultratop.net\/contact-ultratop\/"},"modified":"2026-04-12T01:21:09","modified_gmt":"2026-04-12T01:21:09","slug":"contact-inmiami","status":"publish","type":"page","link":"https:\/\/inmiami.net\/en\/contact-inmiami\/","title":{"rendered":"Contact In Miami"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"152\" class=\"elementor elementor-152\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f1wpgclh twbb_section e-flex e-con-boxed e-con e-parent\" data-id=\"f1wpgclh\" data-element_type=\"container\" data-e-type=\"container\" id=\"lets-connect-and-explore-miami-together\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;background_motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;background_motion_fx_scale_effect&quot;:&quot;yes&quot;,&quot;background_motion_fx_scale_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:7,&quot;sizes&quot;:[]},&quot;background_motion_fx_scale_direction&quot;:&quot;out-in&quot;,&quot;background_motion_fx_scale_range&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:20,&quot;end&quot;:80}},&quot;background_motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-okh0rw7m elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"okh0rw7m\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Let's Plan Your Adventure!<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4ffevus elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"d4ffevus\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tReady to experience Miami like a local? Contact us for personalized recommendations and unforgettable itinerary planning. Let&#8217;s make your Miami trip extraordinary!\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-h4jd7077 twbb_section e-flex e-con-boxed e-con e-parent\" data-id=\"h4jd7077\" data-element_type=\"container\" data-e-type=\"container\" id=\"get-in-touch\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-y4ah4nrm e-con-full e-flex e-con e-child\" data-id=\"y4ah4nrm\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bmdjtwmq elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"bmdjtwmq\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Get in Touch<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f6g4i72 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"0f6g4i72\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tReach out for personalized Miami travel tips and tours.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-qhtz423f elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-align-start elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"qhtz423f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-envelope\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">info@inmiami.net<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-phone-alt\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">+1 305-613-6311<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-map-marker-alt\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Mid Beach, Miami Beach, FL 3340<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74w35gu6 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-initial elementor-mobile-button-align-stretch elementor-button-align-left elementor-invisible elementor-widget elementor-widget-twbb_form\" data-id=\"74w35gu6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;step_next_label&quot;:&quot;Next&quot;,&quot;step_previous_label&quot;:&quot;Previous&quot;,&quot;button_width&quot;:&quot;100&quot;,&quot;step_type&quot;:&quot;number_text&quot;,&quot;step_icon_shape&quot;:&quot;circle&quot;}\" data-widget_type=\"twbb_form.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<form class=\"elementor-form\" method=\"post\" >\n\t\t\t<input type=\"hidden\" name=\"post_id\" value=\"152\"\/>\n\t\t\t<input type=\"hidden\" name=\"form_id\" value=\"74w35gu6\"\/>\n\t\t\t<input type=\"hidden\" name=\"referer_title\" value=\"\" \/>\n\n\t\t\t\n\t\t\t<div class=\"elementor-form-fields-wrapper elementor-labels-above\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-type-text elementor-field-group elementor-column elementor-field-group-name elementor-col-100 elementor-field-required\">\n\t\t\t\t\t\t\t\t\t\t\t\t<label for=\"form-field-name\" class=\"elementor-field-label\">\n\t\t\t\t\t\t\t\tName\t\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<input size=\"1\" type=\"text\" name=\"form_fields[name]\" id=\"form-field-name\" class=\"elementor-field elementor-size-sm  elementor-field-textual\" placeholder=\"Enter your name\" required=\"required\" aria-required=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-type-email elementor-field-group elementor-column elementor-field-group-email elementor-col-100 elementor-field-required\">\n\t\t\t\t\t\t\t\t\t\t\t\t<label for=\"form-field-email\" class=\"elementor-field-label\">\n\t\t\t\t\t\t\t\tEmail\t\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<input size=\"1\" type=\"email\" name=\"form_fields[email]\" id=\"form-field-email\" class=\"elementor-field elementor-size-sm  elementor-field-textual\" placeholder=\"Enter your email\" required=\"required\" aria-required=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-type-textarea elementor-field-group elementor-column elementor-field-group-message elementor-col-100 elementor-field-required\">\n\t\t\t\t\t\t\t\t\t\t\t\t<label for=\"form-field-message\" class=\"elementor-field-label\">\n\t\t\t\t\t\t\t\tMessage\t\t\t\t\t\t\t<\/label>\n\t\t\t\t\t\t<textarea class=\"elementor-field-textual elementor-field  elementor-size-sm\" name=\"form_fields[message]\" id=\"form-field-message\" rows=\"4\" placeholder=\"Type your message\" required=\"required\" aria-required=\"true\"><\/textarea>\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-type-acceptance elementor-field-group elementor-column elementor-field-group-acceptance elementor-col-100 elementor-field-required\">\n\t\t\t\t\t\t\t<div class=\"elementor-field-subgroup\">\n\t\t\t<span class=\"elementor-field-option\">\n\t\t\t\t<input type=\"checkbox\" name=\"form_fields[acceptance]\" id=\"form-field-acceptance\" class=\"elementor-field elementor-size-sm  elementor-acceptance-field\" required=\"required\" aria-required=\"true\">\n\t\t\t\t<label for=\"form-field-acceptance\">I accept the Terms<\/label>\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-group elementor-column elementor-field-type-submit elementor-col-100 e-form__buttons\">\n\t\t\t\t\t<button type=\"submit\" class=\"elementor-button\">\n\t\t\t\t\t\t<span >\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\" elementor-button-icon\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Submit<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/button>\n          <button type=\"reset\" class=\"elementor-button elementor-hidden\">\n\t\t\t\t\t\t<span >\n\t\t\t\t\t\t\t              \t\t\t\t\t\t<\/span>\n          <\/button>\n\t\t\t\t<\/div>\n            \t\t\t<\/div>\n\t\t<\/form>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0dc8716 e-flex e-con-boxed e-con e-parent\" data-id=\"0dc8716\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-86f3972 elementor-widget elementor-widget-html\" data-id=\"86f3972\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=DM+Sans:wght@300;400;500&display=swap\" rel=\"stylesheet\">\n\n<style>\n#inmiami-dome {\n  --teal: #0F6E56; --teal-l: #1D9E75; --teal-p: #E1F5EE;\n  --amber: #BA7517; --amber-p: #FAEEDA; --sand: #F5F0E8;\n  --ink: #1A1A18; --muted: #6B6B60; --bdr: rgba(15,110,86,0.15);\n  --r: 14px;\n  --fd: 'Playfair Display', Georgia, serif;\n  --fb: 'DM Sans', system-ui, sans-serif;\n  font-family: var(--fb) !important;\n  color: var(--ink) !important;\n  font-size: 16px !important;\n  line-height: 1.5 !important;\n  text-align: left !important;\n  max-width: 800px !important;\n  margin: 0 auto !important;\n  padding: 32px 20px 60px !important;\n  box-sizing: border-box !important;\n  background: transparent !important;\n}\n#inmiami-dome * { box-sizing: border-box !important; margin: 0; padding: 0; font-family: inherit; }\n\n\/* LANG TOGGLE *\/\n#inmiami-dome .inm-lang-bar { display: flex; justify-content: flex-end; margin-bottom: 20px; }\n#inmiami-dome .inm-lang-btn { font-family: var(--fb); font-size: 12px; font-weight: 500; padding: 6px 14px; border-radius: 100px; border: 1px solid var(--bdr); background: #fff; color: var(--teal); cursor: pointer; transition: all .18s; letter-spacing: .5px; display: flex; align-items: center; gap: 6px; }\n#inmiami-dome .inm-lang-btn:hover { background: var(--teal-p); border-color: var(--teal); }\n\n\/* HEADER *\/\n#inmiami-dome .inm-header { text-align: center; margin-bottom: 36px; padding-bottom: 28px; border-bottom: 1px solid var(--bdr); }\n#inmiami-dome .inm-eyebrow { font-size: 11px; letter-spacing: 3px; text-transform: uppercase; color: var(--teal); font-weight: 500; margin-bottom: 10px; }\n#inmiami-dome .inm-h1 { font-family: var(--fd) !important; font-size: clamp(26px, 5vw, 40px) !important; font-weight: 700 !important; color: var(--ink) !important; line-height: 1.15 !important; margin-bottom: 10px !important; }\n#inmiami-dome .inm-h1 em { color: var(--teal); font-style: italic; }\n#inmiami-dome .inm-sub { font-size: 15px; color: var(--muted); font-weight: 300; line-height: 1.6; max-width: 460px; margin: 0 auto; }\n\n\/* CONTEXT BAR *\/\n#inmiami-dome .inm-ctx { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; margin-bottom: 24px; }\n#inmiami-dome .inm-ctx-pill { font-size: 12px; padding: 6px 14px; border-radius: 100px; border: 1px solid var(--bdr); color: var(--muted); background: #fff; display: flex; align-items: center; gap: 6px; font-weight: 400; }\n#inmiami-dome .inm-ctx-pill .dot { width: 8px; height: 8px; border-radius: 50%; }\n#inmiami-dome .dot-green { background: #25D366; }\n#inmiami-dome .dot-amber { background: #BA7517; }\n#inmiami-dome .dot-red { background: #E24B4A; }\n#inmiami-dome .dot-blue { background: #185FA5; }\n\n\/* FORM CARD *\/\n#inmiami-dome .inm-card { background: #fff; border: 1px solid var(--bdr); border-radius: var(--r); padding: 32px; margin-bottom: 24px; }\n#inmiami-dome .inm-sec { font-size: 11px; letter-spacing: 2.5px; text-transform: uppercase; color: var(--teal); font-weight: 500; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 1px solid var(--teal-p); }\n#inmiami-dome .inm-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }\n#inmiami-dome .inm-chip { font-family: var(--fb); font-size: 13px; padding: 7px 16px; border-radius: 100px; border: 1px solid var(--bdr); background: #fff; color: var(--ink); cursor: pointer; transition: all .18s; user-select: none; white-space: nowrap; }\n#inmiami-dome .inm-chip:hover { border-color: var(--teal-l); background: var(--teal-p); }\n#inmiami-dome .inm-chip.on { background: var(--teal); color: #fff; border-color: var(--teal); }\n#inmiami-dome .inm-divider { height: 1px; background: var(--bdr); margin: 20px 0; }\n#inmiami-dome .inm-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 22px; }\n#inmiami-dome .inm-field { display: flex; flex-direction: column; gap: 6px; }\n#inmiami-dome .inm-label { font-size: 12px; font-weight: 500; color: var(--muted); letter-spacing: .3px; }\n#inmiami-dome .inm-sel { font-family: var(--fb) !important; font-size: 14px !important; color: var(--ink) !important; background: var(--sand) !important; border: 1px solid transparent !important; border-radius: 8px !important; padding: 11px 36px 11px 14px !important; width: 100% !important; appearance: none !important; -webkit-appearance: none !important; background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B6B60' stroke-width='1.5' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\") !important; background-repeat: no-repeat !important; background-position: right 12px center !important; cursor: pointer; height: auto !important; }\n#inmiami-dome .inm-sel:focus { outline: none; border-color: var(--teal-l) !important; background: #fff !important; }\n\n\/* BUTTON *\/\n#inmiami-dome .inm-btn { width: 100%; padding: 16px 28px; background: var(--teal) !important; color: #fff !important; font-family: var(--fb) !important; font-size: 15px !important; font-weight: 500 !important; border: none !important; border-radius: 10px !important; cursor: pointer; transition: background .2s, transform .12s; display: flex; align-items: center; justify-content: center; gap: 10px; }\n#inmiami-dome .inm-btn:hover { background: var(--teal-l) !important; }\n#inmiami-dome .inm-btn:active { transform: scale(.99); }\n#inmiami-dome .inm-btn:disabled { opacity: .6; cursor: not-allowed; transform: none; }\n\n\/* LOADING *\/\n#inmiami-dome .inm-loading { text-align: center; padding: 48px 24px; display: none; }\n#inmiami-dome .inm-dots { display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; }\n#inmiami-dome .inm-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--teal); animation: inm-b 1.2s ease-in-out infinite; }\n#inmiami-dome .inm-dot:nth-child(2) { animation-delay: .2s; }\n#inmiami-dome .inm-dot:nth-child(3) { animation-delay: .4s; }\n@keyframes inm-b { 0%, 80%, 100% { transform: translateY(0); opacity: .4; } 40% { transform: translateY(-10px); opacity: 1; } }\n#inmiami-dome .inm-ltitle { font-family: var(--fd); font-style: italic; font-size: 18px; color: var(--teal); }\n#inmiami-dome .inm-lsub { font-size: 13px; color: var(--muted); margin-top: 6px; }\n\n\/* RESULT *\/\n#inmiami-dome .inm-result { background: #fff; border: 1px solid var(--bdr); border-radius: var(--r); overflow: hidden; display: none; animation: inm-up .4s ease; }\n@keyframes inm-up { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }\n#inmiami-dome .inm-rhead { background: var(--teal); padding: 28px 32px; color: #fff; }\n#inmiami-dome .inm-reyebrow { font-size: 11px; letter-spacing: 3px; text-transform: uppercase; opacity: .7; margin-bottom: 8px; }\n#inmiami-dome .inm-rtitle { font-family: var(--fd); font-size: clamp(20px, 3.5vw, 28px); font-weight: 700; line-height: 1.2; margin-bottom: 6px; }\n#inmiami-dome .inm-rmeta { font-size: 13px; opacity: .75; display: flex; gap: 14px; flex-wrap: wrap; margin-top: 6px; }\n#inmiami-dome .inm-rbody { padding: 32px; }\n\n\/* STOPS *\/\n#inmiami-dome .inm-stop { border: 1px solid var(--bdr); border-radius: 10px; margin-bottom: 16px; overflow: hidden; }\n#inmiami-dome .inm-shead { display: flex; align-items: center; gap: 14px; padding: 16px 20px; background: var(--sand); border-bottom: 1px solid var(--bdr); }\n#inmiami-dome .inm-snum { width: 32px; height: 32px; border-radius: 50%; background: var(--teal); color: #fff; font-size: 13px; font-weight: 500; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n#inmiami-dome .inm-sname { font-family: var(--fd); font-size: 17px; font-weight: 700; color: var(--ink); flex: 1; }\n#inmiami-dome .inm-sbadge { font-size: 11px; padding: 3px 10px; border-radius: 100px; background: var(--teal-p); color: var(--teal); font-weight: 500; white-space: nowrap; }\n#inmiami-dome .inm-sbody { padding: 18px 20px; }\n#inmiami-dome .inm-sgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; }\n#inmiami-dome .inm-dlbl { font-size: 11px; text-transform: uppercase; letter-spacing: 1.5px; color: var(--muted); font-weight: 500; margin-bottom: 3px; }\n#inmiami-dome .inm-dval { font-size: 14px; color: var(--ink); line-height: 1.4; }\n#inmiami-dome .inm-why { background: var(--teal-p); border-left: 3px solid var(--teal); border-radius: 0 6px 6px 0; padding: 12px 16px; font-size: 13.5px; line-height: 1.6; margin-bottom: 10px; }\n#inmiami-dome .inm-wlbl { font-size: 11px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--teal); display: block; margin-bottom: 4px; font-weight: 500; }\n#inmiami-dome .inm-avoid { font-size: 12.5px; color: var(--amber); display: flex; align-items: flex-start; gap: 6px; line-height: 1.5; }\n#inmiami-dome .inm-arrow { text-align: center; padding: 4px 0; color: var(--teal-l); font-size: 20px; opacity: .5; }\n\n\/* FLOW *\/\n#inmiami-dome .inm-flow { background: var(--amber-p); border-radius: 10px; padding: 20px; margin-top: 20px; border-left: 4px solid var(--amber); }\n#inmiami-dome .inm-ftitle { font-size: 11px; text-transform: uppercase; letter-spacing: 2px; color: var(--amber); font-weight: 500; margin-bottom: 8px; }\n#inmiami-dome .inm-ftext { font-size: 14px; color: var(--ink); line-height: 1.7; }\n\n\/* CONTEXT in result *\/\n#inmiami-dome .inm-ctx-result { background: var(--sand); border-radius: 8px; padding: 12px 16px; margin-top: 16px; font-size: 12px; color: var(--muted); display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }\n#inmiami-dome .inm-ctx-result strong { color: var(--ink); }\n\n\/* WHATSAPP *\/\n#inmiami-dome .inm-wa { margin-top: 20px; padding: 20px; background: var(--sand); border-radius: 10px; text-align: center; }\n#inmiami-dome .inm-wa-lbl { font-size: 13px; color: var(--muted); margin-bottom: 12px; }\n#inmiami-dome .inm-wa-btn { display: inline-flex; align-items: center; gap: 10px; background: #25D366 !important; color: #fff !important; font-family: var(--fb) !important; font-size: 14px; font-weight: 500; padding: 12px 24px; border-radius: 100px; text-decoration: none !important; transition: background .18s, transform .12s; border: none !important; cursor: pointer; }\n#inmiami-dome .inm-wa-btn:hover { background: #1DB954 !important; transform: translateY(-1px); }\n#inmiami-dome .inm-reset { width: 100%; margin-top: 14px; padding: 12px; background: transparent; border: 1px solid var(--bdr); border-radius: 8px; font-family: var(--fb); font-size: 13px; color: var(--muted); cursor: pointer; transition: all .18s; }\n#inmiami-dome .inm-reset:hover { border-color: var(--teal); color: var(--teal); background: var(--teal-p); }\n#inmiami-dome .inm-error { display: none; background: #FFF3F3; border: 1px solid #F09595; border-radius: 8px; padding: 14px 18px; font-size: 14px; color: #A32D2D; margin-top: 12px; line-height: 1.5; }\n#inmiami-dome .inm-db-status { font-size: 11px; text-align: center; color: var(--muted); margin-bottom: 16px; padding: 6px; background: var(--sand); border-radius: 6px; }\n\n@media (max-width: 600px) {\n  #inmiami-dome { padding: 16px 12px 40px !important; }\n  #inmiami-dome .inm-card { padding: 20px !important; }\n  #inmiami-dome .inm-grid { grid-template-columns: 1fr; gap: 12px; }\n  #inmiami-dome .inm-sgrid { grid-template-columns: 1fr; gap: 10px; }\n  #inmiami-dome .inm-rhead { padding: 20px; }\n  #inmiami-dome .inm-rbody { padding: 20px 16px; }\n  #inmiami-dome .inm-shead { padding: 12px 16px; flex-wrap: wrap; }\n  #inmiami-dome .inm-sbody { padding: 16px; }\n  #inmiami-dome .inm-wa-btn { width: 100%; justify-content: center; }\n}\n<\/style>\n\n<div id=\"inmiami-dome\">\n  <div class=\"inm-lang-bar\">\n    <button class=\"inm-lang-btn\" id=\"inmLangBtn\" onclick=\"inmToggleLang()\">\n      \ud83c\udf10 <span id=\"inmLangLabel\">Ver en Espa\u00f1ol<\/span>\n    <\/button>\n  <\/div>\n\n  <div class=\"inm-header\">\n    <div class=\"inm-eyebrow\">inmiami.net \u00b7 Plan Builder<\/div>\n    <h2 class=\"inm-h1\" id=\"inmTitle\">Build your perfect<br><em>Miami experience<\/em><\/h2>\n    <p class=\"inm-sub\" id=\"inmSubtitle\">Tell me your mood and time. I'll build a real plan \u2014 no fluff, no tourist traps.<\/p>\n  <\/div>\n\n  <div class=\"inm-ctx\">\n    <div class=\"inm-ctx-pill\"><div class=\"dot dot-blue\"><\/div> <span id=\"inmWeatherLabel\">Detecting weather...<\/span><\/div>\n    <div class=\"inm-ctx-pill\"><div class=\"dot dot-amber\" id=\"inmTrafficDot\"><\/div> <span id=\"inmTrafficLabel\">Estimating traffic...<\/span><\/div>\n    <div class=\"inm-ctx-pill\">\ud83d\udd50 <span id=\"inmTimeLabel\">\u2013<\/span><\/div>\n  <\/div>\n\n  <div class=\"inm-card\" id=\"inmForm\">\n    <div class=\"inm-db-status\" id=\"inmDbStatus\">\u23f3 Loading experience database...<\/div>\n\n    <div class=\"inm-sec\" id=\"inmSecMood\">What's your mood?<\/div>\n    <div class=\"inm-chips\">\n      <div class=\"inm-chip on\" data-val=\"eat\" data-g=\"mood\" data-en=\"\ud83c\udf7d Eat &amp; Drink\" data-es=\"\ud83c\udf7d Comer y Beber\">\ud83c\udf7d Eat &amp; Drink<\/div>\n      <div class=\"inm-chip\" data-val=\"explore\" data-g=\"mood\" data-en=\"\ud83e\udded Explore\" data-es=\"\ud83e\udded Explorar\">\ud83e\udded Explore<\/div>\n      <div class=\"inm-chip\" data-val=\"capture\" data-g=\"mood\" data-en=\"\ud83d\udcf8 Capture\" data-es=\"\ud83d\udcf8 Fotografiar\">\ud83d\udcf8 Capture<\/div>\n      <div class=\"inm-chip\" data-val=\"real\" data-g=\"mood\" data-en=\"\ud83c\udfad Go Local\" data-es=\"\ud83c\udfad Lo Aut\u00e9ntico\">\ud83c\udfad Go Local<\/div>\n      <div class=\"inm-chip\" data-val=\"disconnect\" data-g=\"mood\" data-en=\"\ud83c\udf3f Disconnect\" data-es=\"\ud83c\udf3f Desconectar\">\ud83c\udf3f Disconnect<\/div>\n    <\/div>\n\n    <div class=\"inm-sec\" id=\"inmSecIntent\">What kind of experience?<\/div>\n    <div class=\"inm-chips\">\n      <div class=\"inm-chip on\" data-val=\"memorable\" data-g=\"intent\" data-en=\"\u2728 Memorable\" data-es=\"\u2728 Memorable\">\u2728 Memorable<\/div>\n      <div class=\"inm-chip\" data-val=\"fast\" data-g=\"intent\" data-en=\"\u26a1 Fast\" data-es=\"\u26a1 R\u00e1pido\">\u26a1 Fast<\/div>\n      <div class=\"inm-chip\" data-val=\"local\" data-g=\"intent\" data-en=\"\ud83c\udfd8 Local\" data-es=\"\ud83c\udfd8 Local\">\ud83c\udfd8 Local<\/div>\n      <div class=\"inm-chip\" data-val=\"spontaneous\" data-g=\"intent\" data-en=\"\ud83c\udfb2 Spontaneous\" data-es=\"\ud83c\udfb2 Espont\u00e1neo\">\ud83c\udfb2 Spontaneous<\/div>\n      <div class=\"inm-chip\" data-val=\"relax\" data-g=\"intent\" data-en=\"\ud83c\udf0a Chill\" data-es=\"\ud83c\udf0a Relajar\">\ud83c\udf0a Chill<\/div>\n    <\/div>\n\n    <div class=\"inm-divider\"><\/div>\n\n    <div class=\"inm-grid\">\n      <div class=\"inm-field\">\n        <label class=\"inm-label\" id=\"inmLblGroup\">Group type<\/label>\n        <select class=\"inm-sel\" id=\"inmGroup\">\n          <option value=\"solo\" data-en=\"Solo\" data-es=\"Solo\">Solo<\/option>\n          <option value=\"couple\" selected data-en=\"Couple\" data-es=\"Pareja\">Couple<\/option>\n          <option value=\"friends\" data-en=\"Friends\" data-es=\"Amigos\">Friends<\/option>\n          <option value=\"family\" data-en=\"Family\" data-es=\"Familia\">Family<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"inm-field\">\n        <label class=\"inm-label\" id=\"inmLblTime\">Time available<\/label>\n        <select class=\"inm-sel\" id=\"inmTime\">\n          <option value=\"2\" data-en=\"2 hours\" data-es=\"2 horas\">2 hours<\/option>\n          <option value=\"3\" selected data-en=\"3 hours\" data-es=\"3 horas\">3 hours<\/option>\n          <option value=\"4\" data-en=\"4 hours\" data-es=\"4 horas\">4 hours<\/option>\n          <option value=\"6\" data-en=\"Half day (6h)\" data-es=\"Medio d\u00eda (6h)\">Half day (6h)<\/option>\n          <option value=\"8\" data-en=\"Full day (8h)\" data-es=\"D\u00eda completo (8h)\">Full day (8h)<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"inm-field\" style=\"grid-column:1\/-1\">\n        <label class=\"inm-label\" id=\"inmLblArea\">Starting area<\/label>\n        <select class=\"inm-sel\" id=\"inmArea\">\n          <option value=\"South Beach\">South Beach<\/option>\n          <option value=\"Wynwood\">Wynwood<\/option>\n          <option value=\"Brickell\">Brickell<\/option>\n          <option value=\"Coconut Grove\">Coconut Grove<\/option>\n          <option value=\"Little Havana\">Little Havana<\/option>\n          <option value=\"Downtown Miami\">Downtown Miami<\/option>\n          <option value=\"Key Biscayne\">Key Biscayne<\/option>\n          <option value=\"Coral Gables\">Coral Gables<\/option>\n          <option value=\"Miami Beach North\">Miami Beach North<\/option>\n          <option value=\"Design District\">Design District<\/option>\n          <option value=\"Homestead \/ South\">Homestead \/ South<\/option>\n        <\/select>\n      <\/div>\n    <\/div>\n\n    <button class=\"inm-btn\" id=\"inmBtnGen\" onclick=\"inmGenerate()\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M9 2L11 7H16L12 10.5L13.5 16L9 13L4.5 16L6 10.5L2 7H7L9 2Z\" fill=\"white\" opacity=\".9\"\/><\/svg>\n      <span id=\"inmBtnLabel\">Build My Miami Plan<\/span>\n    <\/button>\n    <div class=\"inm-error\" id=\"inmError\"><\/div>\n  <\/div>\n\n  <div class=\"inm-loading\" id=\"inmLoading\">\n    <div class=\"inm-dots\"><div class=\"inm-dot\"><\/div><div class=\"inm-dot\"><\/div><div class=\"inm-dot\"><\/div><\/div>\n    <div class=\"inm-ltitle\" id=\"inmLoadTitle\">Building your plan...<\/div>\n    <div class=\"inm-lsub\" id=\"inmLsub\">Scanning the database for your mood<\/div>\n  <\/div>\n\n  <div class=\"inm-result\" id=\"inmResult\">\n    <div class=\"inm-rhead\">\n      <div class=\"inm-reyebrow\" id=\"inmReyebrow\">Your InMiami Experience<\/div>\n      <div class=\"inm-rtitle\" id=\"inmPlanTitle\">\u2013<\/div>\n      <div class=\"inm-rmeta\" id=\"inmPlanMeta\"><\/div>\n    <\/div>\n    <div class=\"inm-rbody\">\n      <div id=\"inmStops\"><\/div>\n      <div class=\"inm-flow\" id=\"inmFlow\" style=\"display:none\">\n        <div class=\"inm-ftitle\" id=\"inmFlowTitle\">Why this sequence works<\/div>\n        <div class=\"inm-ftext\" id=\"inmFlowText\"><\/div>\n      <\/div>\n      <div class=\"inm-ctx-result\" id=\"inmCtxResult\"><\/div>\n      <div class=\"inm-wa\">\n        <div class=\"inm-wa-lbl\" id=\"inmWaLbl\">Want to tweak this or book directly with Daniel?<\/div>\n        <a id=\"inmWaBtn\" href=\"#\" target=\"_blank\" class=\"inm-wa-btn\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/><\/svg>\n          <span id=\"inmWaBtnLabel\">Refine with Daniel \u00b7 WhatsApp<\/span>\n        <\/a>\n      <\/div>\n      <button class=\"inm-reset\" id=\"inmResetBtn\" onclick=\"inmReset()\">\u2190 Build another plan<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n\nconst CONFIG = {\n  WA_NUMBER: '13056136311',\n  WORKER_URL: 'https:\/\/iinmiami-ai.elsatodad.workers.dev\/',\n  SHEET_CSV_URL: 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQ-a5yR31pmgPuZTB-E6fe-oA-8tDqI-LyjCYdfPzR-ByeQDuqKSH0ufRN4MMyWrL-Wr_GttEbSbL4I\/pub?output=csv',\n  LAT: 25.7617,\n  LNG: -80.1918,\n  TRAFFIC_PROFILE: {0:0,1:0,2:0,3:0,4:0,5:0,6:1,7:2,8:2,9:1,10:0,11:0,12:1,13:1,14:0,15:1,16:2,17:2,18:2,19:1,20:0,21:0,22:1,23:1},\n  TRAFFIC_LABEL: ['Light','Moderate','Heavy'],\n  TRAFFIC_DOT: ['dot-green','dot-amber','dot-red'],\n  TRAFFIC_EMOJI: ['\ud83d\udfe2','\ud83d\udfe1','\ud83d\udd34'],\n  WEATHER_MAP: { sunny:[0,1], cloudy:[2,3,45,48], rainy:[51,53,55,61,63,65,80,81,82,95,96,99], windy:[71,73,75,77,85,86] }\n};\n\nconst T = {\n  en: {\n    langBtn: 'Ver en Espa\u00f1ol',\n    eyebrow: 'inmiami.net \u00b7 Plan Builder',\n    title: 'Build your perfect<br><em>Miami experience<\/em>',\n    subtitle: 'Tell me your mood and time. I\\'ll build a real plan \u2014 no fluff, no tourist traps.',\n    secMood: \"What's your mood?\",\n    secIntent: 'What kind of experience?',\n    lblGroup: 'Group type',\n    lblTime: 'Time available',\n    lblArea: 'Starting area',\n    btnLabel: 'Build My Miami Plan',\n    loadTitle: 'Building your plan...',\n    loadMsgs: ['Scanning the database for your mood...','Checking the causeway traffic...','Reading the Miami weather right now...','Asking Daniel what he\\'d recommend...','Avoiding tourist traps \u2014 promise...','Calculating the perfect sequence...'],\n    dbLoading: '\u23f3 Loading experience database...',\n    dbLoaded: (n) => `\u2705 ${n} experiences loaded from Google Sheets`,\n    dbFallback: (n) => `\u26a0\ufe0f Sheet unavailable \u2014 using built-in database (${n} places)`,\n    dbBuiltin: (n) => `\u2705 ${n} experiences loaded (built-in database)`,\n    reyebrow: 'Your InMiami Experience',\n    flowTitle: 'Why this sequence works',\n    waLbl: 'Want to tweak this or book directly with Daniel?',\n    waBtnLabel: 'Refine with Daniel \u00b7 WhatsApp',\n    resetBtn: '\u2190 Build another plan',\n    ctxBuilt: 'Plan built with live data:',\n    error: 'Something went wrong building your plan. Check your connection and try again.',\n    weatherUnavail: '\u2600\ufe0f Weather unavailable',\n    detectingWeather: 'Detecting weather...',\n    estimatingTraffic: 'Estimating traffic...',\n    traffic: (e, l) => `${e} Traffic: ${l}`,\n    planLang: 'en',\n  },\n  es: {\n    langBtn: 'View in English',\n    eyebrow: 'inmiami.net \u00b7 Creador de Planes',\n    title: 'Crea tu experiencia<br><em>perfecta en Miami<\/em>',\n    subtitle: 'Dime tu estado de \u00e1nimo y tiempo disponible. Te armo un plan real \u2014 sin relleno, sin trampas tur\u00edsticas.',\n    secMood: '\u00bfCu\u00e1l es tu mood?',\n    secIntent: '\u00bfQu\u00e9 tipo de experiencia?',\n    lblGroup: 'Tipo de grupo',\n    lblTime: 'Tiempo disponible',\n    lblArea: 'Zona de inicio',\n    btnLabel: 'Crear mi Plan en Miami',\n    loadTitle: 'Armando tu plan...',\n    loadMsgs: ['Escaneando la base de datos seg\u00fan tu mood...','Revisando el tr\u00e1fico en la Causeway...','Leyendo el clima de Miami en este momento...','Consultando qu\u00e9 recomendar\u00eda Daniel...','Evitando trampas tur\u00edsticas \u2014 prometido...','Calculando la secuencia perfecta...'],\n    dbLoading: '\u23f3 Cargando base de datos de experiencias...',\n    dbLoaded: (n) => `\u2705 ${n} experiencias cargadas desde Google Sheets`,\n    dbFallback: (n) => `\u26a0\ufe0f Sheet no disponible \u2014 usando base de datos integrada (${n} lugares)`,\n    dbBuiltin: (n) => `\u2705 ${n} experiencias cargadas (base de datos integrada)`,\n    reyebrow: 'Tu Experiencia InMiami',\n    flowTitle: 'Por qu\u00e9 esta secuencia funciona',\n    waLbl: '\u00bfQuieres ajustar este plan o reservar directamente con Daniel?',\n    waBtnLabel: 'Hablar con Daniel \u00b7 WhatsApp',\n    resetBtn: '\u2190 Crear otro plan',\n    ctxBuilt: 'Plan creado con datos en vivo:',\n    error: 'Algo sali\u00f3 mal al crear tu plan. Verifica tu conexi\u00f3n e intenta de nuevo.',\n    weatherUnavail: '\u2600\ufe0f Clima no disponible',\n    detectingWeather: 'Detectando clima...',\n    estimatingTraffic: 'Estimando tr\u00e1fico...',\n    traffic: (e, l) => `${e} Tr\u00e1fico: ${l}`,\n    planLang: 'es',\n  }\n};\n\nconst TRAFFIC_LABEL_ES = ['Ligero','Moderado','Pesado'];\nconst WEATHER_LABEL_ES = {Sunny:'Soleado',Cloudy:'Nublado',Rainy:'Lluvioso',Windy:'Ventoso'};\n\nlet lang = 'en';\nlet DB = [];\nlet wxData = { label:'Sunny', cat:'sunny', temp:'\u2013', emoji:'\u2600\ufe0f' };\nlet tfData = { level:1, label:'Moderate', emoji:'\ud83d\udfe1' };\nlet nowHour = new Date().getHours();\n\nwindow.inmToggleLang = function() {\n  lang = lang === 'en' ? 'es' : 'en';\n  applyLang();\n};\n\nfunction applyLang() {\n  const t = T[lang];\n  document.getElementById('inmLangLabel').textContent = t.langBtn;\n  document.getElementById('inmTitle').innerHTML = t.title;\n  document.getElementById('inmSubtitle').textContent = t.subtitle;\n  document.getElementById('inmSecMood').textContent = t.secMood;\n  document.getElementById('inmSecIntent').textContent = t.secIntent;\n  document.getElementById('inmLblGroup').textContent = t.lblGroup;\n  document.getElementById('inmLblTime').textContent = t.lblTime;\n  document.getElementById('inmLblArea').textContent = t.lblArea;\n  document.getElementById('inmBtnLabel').textContent = t.btnLabel;\n  document.getElementById('inmLoadTitle').textContent = t.loadTitle;\n  document.getElementById('inmReyebrow').textContent = t.reyebrow;\n  document.getElementById('inmFlowTitle').textContent = t.flowTitle;\n  document.getElementById('inmWaLbl').textContent = t.waLbl;\n  document.getElementById('inmWaBtnLabel').textContent = t.waBtnLabel;\n  document.getElementById('inmResetBtn').textContent = t.resetBtn;\n\n  document.querySelectorAll('#inmiami-dome .inm-chip').forEach(c => {\n    c.innerHTML = c.dataset[lang] || c.innerHTML;\n  });\n\n  document.querySelectorAll('#inmGroup option, #inmTime option').forEach(o => {\n    o.textContent = o.dataset[lang] || o.textContent;\n  });\n\n  const wLabel = lang === 'es' ? (WEATHER_LABEL_ES[wxData.label] || wxData.label) : wxData.label;\n  document.getElementById('inmWeatherLabel').textContent = `${wxData.emoji} ${wxData.temp}\u00b0F \u00b7 ${wLabel}`;\n\n  const tLevel = tfData.level;\n  const tLabel = lang === 'es' ? TRAFFIC_LABEL_ES[tLevel] : CONFIG.TRAFFIC_LABEL[tLevel];\n  document.getElementById('inmTrafficLabel').textContent = `${tfData.emoji} ${lang === 'es' ? 'Tr\u00e1fico' : 'Traffic'}: ${tLabel}`;\n}\n\nasync function init() {\n  updateClock();\n  estimateTraffic();\n  await Promise.all([fetchWeather(), fetchDB()]);\n}\n\nfunction updateClock() {\n  const now = new Date();\n  nowHour = now.getHours();\n  const opts = {hour:'2-digit',minute:'2-digit',timeZone:'America\/New_York'};\n  document.getElementById('inmTimeLabel').textContent = now.toLocaleTimeString('en-US', opts) + ' Miami time';\n}\n\nfunction estimateTraffic() {\n  const now = new Date();\n  const day = now.getDay();\n  const hr = now.getHours();\n  let level = CONFIG.TRAFFIC_PROFILE[hr] ?? 0;\n  if (day === 0 || day === 6) {\n    if (hr >= 7 && hr <= 9) level = Math.max(0, level - 1);\n    if (hr >= 15 && hr <= 19) level = Math.min(1, level);\n  }\n  if (day === 5 && hr >= 16 && hr <= 19) level = 2;\n  tfData = { level, label: CONFIG.TRAFFIC_LABEL[level], emoji: CONFIG.TRAFFIC_EMOJI[level] };\n  const dot = document.getElementById('inmTrafficDot');\n  dot.className = 'dot ' + CONFIG.TRAFFIC_DOT[level];\n  const tLabel = lang === 'es' ? TRAFFIC_LABEL_ES[level] : CONFIG.TRAFFIC_LABEL[level];\n  document.getElementById('inmTrafficLabel').textContent = `${tfData.emoji} ${lang === 'es' ? 'Tr\u00e1fico' : 'Traffic'}: ${tLabel}`;\n}\n\nasync function fetchWeather() {\n  try {\n    const url = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${CONFIG.LAT}&longitude=${CONFIG.LNG}&current=temperature_2m,weathercode,windspeed_10m&temperature_unit=fahrenheit&timezone=America%2FNew_York`;\n    const res = await fetch(url);\n    const d = await res.json();\n    const code = d.current.weathercode;\n    const temp = Math.round(d.current.temperature_2m);\n    const wind = d.current.windspeed_10m;\n    let cat = 'sunny';\n    for (const [key, codes] of Object.entries(CONFIG.WEATHER_MAP)) {\n      if (codes.includes(code)) { cat = key; break; }\n    }\n    if (wind > 20 && cat === 'sunny') cat = 'windy';\n    const emojiMap = {sunny:'\u2600\ufe0f',cloudy:'\ud83c\udf24',rainy:'\ud83c\udf27',windy:'\ud83d\udca8'};\n    const labelMap = {sunny:'Sunny',cloudy:'Cloudy',rainy:'Rainy',windy:'Windy'};\n    wxData = { label: labelMap[cat], cat, temp, emoji: emojiMap[cat] };\n    const wLabel = lang === 'es' ? (WEATHER_LABEL_ES[wxData.label] || wxData.label) : wxData.label;\n    document.getElementById('inmWeatherLabel').textContent = `${wxData.emoji} ${wxData.temp}\u00b0F \u00b7 ${wLabel}`;\n  } catch(e) {\n    document.getElementById('inmWeatherLabel').textContent = T[lang].weatherUnavail;\n  }\n}\n\nasync function fetchDB() {\n  const dbStatus = document.getElementById('inmDbStatus');\n  dbStatus.textContent = T[lang].dbLoading;\n  if (!CONFIG.SHEET_CSV_URL) {\n    DB = getFallbackDB();\n    dbStatus.textContent = T[lang].dbBuiltin(DB.length);\n    dbStatus.style.color = 'var(--teal)';\n    return;\n  }\n  const urls = [CONFIG.SHEET_CSV_URL, `https:\/\/corsproxy.io\/?${encodeURIComponent(CONFIG.SHEET_CSV_URL)}`];\n  for (const url of urls) {\n    try {\n      const res = await fetch(url, { cache: 'no-cache' });\n      if (!res.ok) continue;\n      const csv = await res.text();\n      const parsed = parseCSV(csv);\n      if (parsed.length > 0) {\n        DB = parsed;\n        dbStatus.textContent = T[lang].dbLoaded(parsed.length);\n        dbStatus.style.color = 'var(--teal)';\n        return;\n      }\n    } catch(e) {}\n  }\n  DB = getFallbackDB();\n  dbStatus.textContent = T[lang].dbFallback(DB.length);\n  dbStatus.style.color = 'var(--amber)';\n}\n\nfunction parseCSV(csv) {\n  const lines = csv.trim().split('\\n');\n  const headers = lines[0].split(',').map(h => h.trim().replace(\/\"\/g,'').toLowerCase());\n  return lines.slice(1).filter(line => {\n    const fc = (line.split(',')[0]||'').replace(\/\"\/g,'').trim().toLowerCase();\n    return fc && !fc.includes('place name') && !fc.includes('exact') && !fc.includes('instruc');\n  }).map(line => {\n    const vals = line.match(\/(\".*?\"|[^,]+)(?=,|$)\/g) || [];\n    const obj = {};\n    headers.forEach((h,i) => {\n      let v = (vals[i]||'').trim().replace(\/^\"|\"$\/g,'');\n      if (['mood_tags','group_fit','best_time','weather_fit'].includes(h)) obj[h] = v.split('|').map(x=>x.trim()).filter(Boolean);\n      else if (['time_min','time_max','reliability'].includes(h)) obj[h] = parseInt(v)||0;\n      else obj[h] = v;\n    });\n    return obj;\n  }).filter(r => r.name && r.name.length > 1);\n}\n\nfunction getFallbackDB() {\n  return [\n    {name:\"Venetian Pool\",type:\"experience\",zone:\"Coral Gables\",mood_tags:[\"disconnect\",\"explore\",\"capture\"],group_fit:[\"couple\",\"family\",\"friends\"],time_min:90,time_max:180,best_time:[\"morning\",\"afternoon\"],weather_fit:[\"sunny\",\"cloudy\"],cost:\"$$\",parking:\"medium\",why:\"Swim in a historic coral quarry \u2014 the most unexpected pool in the US\",avoid:\"Closed Sept\u2013Oct. Crowded on weekends after 11am.\",reliability:5}\n  ];\n}\n\ndocument.querySelectorAll('#inmiami-dome .inm-chip').forEach(c => {\n  c.addEventListener('click', () => {\n    const g = c.dataset.g;\n    document.querySelectorAll(`#inmiami-dome .inm-chip[data-g=\"${g}\"]`).forEach(x => x.classList.remove('on'));\n    c.classList.add('on');\n  });\n});\n\nfunction getChip(g) {\n  const a = document.querySelector(`#inmiami-dome .inm-chip.on[data-g=\"${g}\"]`);\n  return a ? a.dataset.val : '';\n}\n\nlet li;\nfunction startLoad() {\n  const msgs = T[lang].loadMsgs;\n  let i = 0;\n  document.getElementById('inmLsub').textContent = msgs[0];\n  li = setInterval(() => { i = (i+1) % msgs.length; document.getElementById('inmLsub').textContent = msgs[i]; }, 2000);\n}\nfunction stopLoad() { clearInterval(li); }\n\nfunction getTimeOfDay(h) {\n  if (h >= 5  && h < 12) return 'morning';\n  if (h >= 12 && h < 17) return 'afternoon';\n  if (h >= 17 && h < 20) return 'sunset';\n  return 'night';\n}\n\nwindow.inmGenerate = async function() {\n  const mood   = getChip('mood');\n  const intent = getChip('intent');\n  const group  = document.getElementById('inmGroup').value;\n  const time   = document.getElementById('inmTime').value;\n  const area   = document.getElementById('inmArea').value;\n  const tod    = getTimeOfDay(nowHour);\n\n  document.getElementById('inmError').style.display = 'none';\n  document.getElementById('inmForm').style.display = 'none';\n  document.getElementById('inmLoading').style.display = 'block';\n  document.getElementById('inmResult').style.display = 'none';\n  document.getElementById('inmBtnGen').disabled = true;\n  document.getElementById('inmLoadTitle').textContent = T[lang].loadTitle;\n  startLoad();\n\n  const dbContext = DB.map(p =>\n    `- ${p.name} [${p.zone}] type:${p.type} mood:${(p.mood_tags||[]).join('\/')} group:${(p.group_fit||[]).join('\/')} time:${p.time_min}-${p.time_max}min weather:${(p.weather_fit||[]).join('\/')} cost:${p.cost} parking:${p.parking} reliability:${p.reliability} | WHY: ${p.why} | AVOID: ${p.avoid}`\n  ).join('\\n');\n\n  const isEs = lang === 'es';\n\n  const sys = `You are Daniel D\u00edaz \u2014 Miami local with 30+ years in the city, 12 years in Miami Beach, 10+ years rideshare driver with 23,000+ trips and 500,000+ miles in Miami-Dade. You run inmiami.net.\n\n${isEs ? 'IMPORTANT: Respond entirely in Spanish. All text fields in the JSON must be in Spanish.' : 'Respond in English.'}\n\nLIVE CONTEXT:\n- Weather: ${wxData.emoji} ${wxData.label} (${wxData.temp}\u00b0F)\n- Traffic: ${tfData.emoji} ${tfData.label}\n- Time of day: ${tod}\n\nPLACE DATABASE (${DB.length} places):\n${dbContext}\n\nRULES:\n1. Select 2\u20134 stops MAX.\n2. No zig-zag. Keep stops near ${area}.\n3. Rainy\/windy \u2192 indoor or covered spots.\n4. Heavy traffic \u2192 cluster in one neighborhood.\n5. Sunset time \u2192 best view stop last.\n6. Always include ONE food\/drink stop.\n7. Cost: family\u2192$-$$, couple\u2192up to $$$, solo\u2192$-$$.\n8. Use ONLY places from the database. Do not invent.\n\nOUTPUT: valid JSON only, no markdown:\n{\"plan_name\":\"3-6 word evocative name\",\"stops\":[{\"name\":\"exact name from database\",\"type\":\"experience|food|area\",\"what_to_do\":\"1-2 sentence action\",\"time_est\":\"X-Y min\",\"cost\":\"Free|$|$$|$$$\",\"parking\":\"Easy|Medium|Hard|Not needed\",\"best_moment\":\"timing tip\",\"why\":\"why this fits this user now\",\"watch_out\":\"one warning max 12 words\"}],\"flow\":\"2-3 sentences on why sequence works\",\"total_time\":\"X hours\"}`;\n\n  const usr = `Build my Miami plan:\\n- Mood: ${mood} (${intent})\\n- Group: ${group}\\n- Time: ${time} hours\\n- Starting: ${area}\\n- Time of day: ${tod}\\n- Weather: ${wxData.label}\\n- Traffic: ${tfData.label}\\n\\nBe specific. Be local. No tourist traps.`;\n\n  try {\n    const res = await fetch(CONFIG.WORKER_URL, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application\/json\" },\n      body: JSON.stringify({\n        model: \"claude-sonnet-4-20250514\",\n        max_tokens: 2000,\n        system: sys,\n        messages: [{ role: \"user\", content: usr }]\n      })\n    });\n    const d = await res.json();\n    stopLoad();\n    if (d.error) throw new Error(d.error.message);\n    let raw = d.content[0].text.trim().replace(\/```json|```\/g,'').trim();\n    const plan = JSON.parse(raw);\n    inmRenderPlan(plan, { mood, intent, group, time, tod, area });\n  } catch(e) {\n    stopLoad();\n    document.getElementById('inmForm').style.display = 'block';\n    document.getElementById('inmLoading').style.display = 'none';\n    document.getElementById('inmBtnGen').disabled = false;\n    const er = document.getElementById('inmError');\n    er.style.display = 'block';\n    er.textContent = T[lang].error;\n    console.error(e);\n  }\n};\n\nfunction cap(s){ return s ? s.charAt(0).toUpperCase() + s.slice(1) : ''; }\n\nfunction inmRenderPlan(plan, inp) {\n  document.getElementById('inmLoading').style.display = 'none';\n  document.getElementById('inmResult').style.display = 'block';\n  document.getElementById('inmPlanTitle').textContent = plan.plan_name || 'Your Miami Plan';\n  document.getElementById('inmReyebrow').textContent = T[lang].reyebrow;\n  document.getElementById('inmFlowTitle').textContent = T[lang].flowTitle;\n  document.getElementById('inmWaLbl').textContent = T[lang].waLbl;\n  document.getElementById('inmWaBtnLabel').textContent = T[lang].waBtnLabel;\n  document.getElementById('inmResetBtn').textContent = T[lang].resetBtn;\n\n  document.getElementById('inmPlanMeta').innerHTML =\n    `<span>\u23f1 ${plan.total_time||inp.time+' h'}<\/span>` +\n    `<span>\ud83d\udc65 ${cap(inp.group)}<\/span>` +\n    `<span>\ud83d\udccd ${inp.area}<\/span>` +\n    `<span>${wxData.emoji} ${wxData.label}<\/span>` +\n    `<span>${tfData.emoji} ${tfData.label}<\/span>`;\n\n  const cont = document.getElementById('inmStops');\n  cont.innerHTML = '';\n  const pi = {'Free': lang==='es'?'\ud83c\udd93 Gratis':'\ud83c\udd93 Free','$':'$ Budget','$$':'$$ Mid','$$$':'$$$ Premium'};\n  const pk = {'Easy': lang==='es'?'\ud83d\udfe2 F\u00e1cil':'\ud83d\udfe2 Easy','Medium': lang==='es'?'\ud83d\udfe1 Medio':'\ud83d\udfe1 Medium','Hard': lang==='es'?'\ud83d\udd34 Dif\u00edcil':'\ud83d\udd34 Hard','Not needed': lang==='es'?'\ud83d\udeb6 N\/A':'\ud83d\udeb6 N\/A'};\n  const wlbl = lang === 'es' ? 'Por qu\u00e9 esto' : 'Why this';\n  const avoidlbl = lang === 'es' ? 'Tiempo' : 'Time';\n  const costlbl = lang === 'es' ? 'Costo' : 'Cost';\n  const parklbl = lang === 'es' ? 'Parking' : 'Parking';\n  const momentlbl = lang === 'es' ? 'Mejor momento' : 'Best moment';\n\n  plan.stops.forEach((s, i) => {\n    if (i > 0) {\n      const a = document.createElement('div');\n      a.className = 'inm-arrow';\n      a.innerHTML = '\u2193';\n      cont.appendChild(a);\n    }\n    const el = document.createElement('div');\n    el.className = 'inm-stop';\n    el.innerHTML = `\n      <div class=\"inm-shead\">\n        <div class=\"inm-snum\">${i+1}<\/div>\n        <div class=\"inm-sname\">${s.name}<\/div>\n        <div class=\"inm-sbadge\">${cap(s.type)}<\/div>\n      <\/div>\n      <div class=\"inm-sbody\">\n        <div class=\"inm-why\">${s.what_to_do}<\/div>\n        <div class=\"inm-sgrid\">\n          <div><div class=\"inm-dlbl\">${avoidlbl}<\/div><div class=\"inm-dval\">\u23f1 ${s.time_est}<\/div><\/div>\n          <div><div class=\"inm-dlbl\">${costlbl}<\/div><div class=\"inm-dval\">${pi[s.cost]||s.cost}<\/div><\/div>\n          <div><div class=\"inm-dlbl\">${parklbl}<\/div><div class=\"inm-dval\">${pk[s.parking]||s.parking}<\/div><\/div>\n          <div><div class=\"inm-dlbl\">${momentlbl}<\/div><div class=\"inm-dval\">${s.best_moment||'\u2013'}<\/div><\/div>\n        <\/div>\n        <div class=\"inm-why\"><span class=\"inm-wlbl\">${wlbl}<\/span>${s.why}<\/div>\n        ${s.watch_out ? `<div class=\"inm-avoid\">\u26a0\ufe0f <span>${s.watch_out}<\/span><\/div>` : ''}\n      <\/div>`;\n    cont.appendChild(el);\n  });\n\n  if (plan.flow) {\n    document.getElementById('inmFlow').style.display = 'block';\n    document.getElementById('inmFlowText').textContent = plan.flow;\n  }\n\n  const wLabel = lang === 'es' ? (WEATHER_LABEL_ES[wxData.label] || wxData.label) : wxData.label;\n  const ctxLbl = lang === 'es' ? 'Plan creado con datos en vivo:' : 'Plan built with live data:';\n  document.getElementById('inmCtxResult').innerHTML =\n    `<strong>${ctxLbl}<\/strong> ${wxData.emoji} ${wLabel} ${wxData.temp}\u00b0F \u00b7 ${tfData.emoji} ${tfData.label} \u00b7 \ud83d\udd50 ${cap(inp.tod)}`;\n\n  const waMsg = encodeURIComponent(\n    lang === 'es'\n      ? `\u00a1Hola Daniel! Acabo de crear este plan en inmiami.net:\\n\\n\ud83d\udccd *${plan.plan_name}*\\nParadas: ${plan.stops.map(s=>s.name).join(' \u2192 ')}\\n\\n- Grupo: ${cap(inp.group)}\\n- Tiempo: ${inp.time}h\\n- Zona: ${inp.area}\\n- Clima: ${wLabel} ${wxData.temp}\u00b0F\\n\\n\u00bfMe puedes ayudar a ajustarlo o reservarlo?`\n      : `Hey Daniel! I just built this plan on inmiami.net:\\n\\n\ud83d\udccd *${plan.plan_name}*\\nStops: ${plan.stops.map(s=>s.name).join(' \u2192 ')}\\n\\n- Group: ${cap(inp.group)}\\n- Time: ${inp.time}h\\n- Area: ${inp.area}\\n- Weather: ${wxData.label} ${wxData.temp}\u00b0F\\n\\nCan you help me refine or book it?`\n  );\n  document.getElementById('inmWaBtn').href = `https:\/\/wa.me\/${CONFIG.WA_NUMBER}?text=${waMsg}`;\n}\n\nwindow.inmReset = function() {\n  document.getElementById('inmForm').style.display = 'block';\n  document.getElementById('inmResult').style.display = 'none';\n  document.getElementById('inmLoading').style.display = 'none';\n  document.getElementById('inmBtnGen').disabled = false;\n  document.getElementById('inmError').style.display = 'none';\n};\n\ninit();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Let&#8217;s Plan Your Adventure! Ready to experience Miami like a local? Contact us for personalized recommendations and unforgettable itinerary planning. Let&#8217;s make your Miami trip extraordinary! Get in Touch Reach out for personalized Miami travel tips and tours. info@inmiami.net +1 305-613-6311 Mid Beach, Miami Beach, FL 3340 \ud83c\udf10 Ver en Espa\u00f1ol inmiami.net \u00b7 Plan Builder [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-152","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/pages\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":0,"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/pages\/152\/revisions"}],"wp:attachment":[{"href":"https:\/\/inmiami.net\/en\/wp-json\/wp\/v2\/media?parent=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}