/* =========================================================
MANGO GETAWAY — SÃO PAULO CITY v1
========================================================= */
/* =========================================================
01. ROOT / VARIABLES
========================================================= */
#mg-sp {
--mg-bg: #14110e;
--mg-bg-2: #1b1713;
--mg-bg-3: #211c17;
--mg-bg-4: #2b241d;
--mg-cream: #fff5e6;
--mg-cream-soft: #e8dccb;
--mg-muted: #a99d8e;
--mg-mango: #f4a641;
--mg-mango-dark: #d87916;
--mg-line: rgba(255, 245, 230, 0.14);
--mg-line-strong: rgba(255, 245, 230, 0.25);
--mg-display: "Cormorant Garamond", Georgia, serif;
--mg-body: "DM Sans", Arial, sans-serif;
--mg-mono: "DM Mono", monospace;
--mg-radius: 4px;
--mg-max: 1240px;
position: relative;
width: 100%;
overflow: hidden;
background: var(--mg-bg);
color: var(--mg-cream);
font-family: var(--mg-body);
}
/* =========================================================
02. RESET / GLOBAL
========================================================= */
#mg-sp *,
#mg-sp *::before,
#mg-sp *::after {
box-sizing: border-box;
}
#mg-sp a {
color: inherit;
text-decoration: none;
}
#mg-sp button {
font: inherit;
}
#mg-sp h1,
#mg-sp h2,
#mg-sp h3,
#mg-sp p {
margin-top: 0;
}
.mg-sp-container {
width: min(calc(100% - 48px), var(--mg-max));
margin-inline: auto;
}
/* =========================================================
03. SHARED TYPOGRAPHY
========================================================= */
.mg-sp-section-label,
.mg-sp-eyebrow {
margin-bottom: 18px;
font-family: var(--mg-mono);
font-size: 11px;
line-height: 1.4;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--mg-mango);
}
.mg-sp-heading {
max-width: 800px;
margin-bottom: 58px;
}
.mg-sp-heading--center {
margin-inline: auto;
text-align: center;
}
.mg-sp-heading h2,
.mg-sp-intro h2,
.mg-sp-areas h2,
.mg-sp-decision h2,
.mg-sp-next h2,
.mg-sp-close h2 {
margin-bottom: 0;
font-family: var(--mg-display);
font-weight: 500;
font-size: clamp(42px, 5.4vw, 74px);
line-height: 0.96;
letter-spacing: -0.035em;
}
.mg-sp-heading > p:last-child {
max-width: 590px;
margin: 22px auto 0;
color: var(--mg-muted);
font-size: 16px;
line-height: 1.7;
}
/* =========================================================
04. HERO
========================================================= */
.mg-sp-hero {
position: relative;
min-height: min(900px, 100svh);
display: flex;
align-items: stretch;
background: #15110e;
}
.mg-sp-hero__media {
position: absolute;
inset: 0;
background-image:
url("YOUR-SAOPAULO-CITY-HERO-IMAGE.webp");
background-position: center;
background-size: cover;
transform: scale(1.01);
}
.mg-sp-hero__overlay {
position: absolute;
inset: 0;
background:
linear-gradient(
90deg,
rgba(15, 12, 9, 0.95) 0%,
rgba(15, 12, 9, 0.80) 42%,
rgba(15, 12, 9, 0.33) 72%,
rgba(15, 12, 9, 0.22) 100%
),
linear-gradient(
0deg,
rgba(20, 17, 14, 0.92) 0%,
rgba(20, 17, 14, 0.08) 48%
);
}
.mg-sp-hero__inner {
position: relative;
z-index: 2;
min-height: min(900px, 100svh);
display: flex;
flex-direction: column;
padding-top: 42px;
padding-bottom: 32px;
}
.mg-sp-breadcrumbs {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
font-family: var(--mg-mono);
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(255, 245, 230, 0.67);
}
.mg-sp-breadcrumbs a {
transition:
color 180ms ease;
}
.mg-sp-breadcrumbs a:hover {
color: var(--mg-cream);
}
.mg-sp-hero__content {
width: min(720px, 100%);
margin-top: auto;
margin-bottom: auto;
padding: 80px 0;
}
.mg-sp-hero h1 {
margin-bottom: 30px;
font-family: var(--mg-display);
font-size: clamp(68px, 9vw, 132px);
line-height: 0.78;
letter-spacing: -0.055em;
font-weight: 500;
}
.mg-sp-hero h1 em {
color: var(--mg-mango);
font-weight: 400;
}
.mg-sp-hero__lead {
max-width: 600px;
margin-bottom: 34px;
color: rgba(255, 245, 230, 0.85);
font-size: clamp(17px, 1.8vw, 21px);
line-height: 1.6;
}
.mg-sp-button {
min-height: 52px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 24px;
border: 1px solid transparent;
border-radius: var(--mg-radius);
font-size: 13px;
font-weight: 700;
letter-spacing: 0.02em;
transition:
transform 180ms ease,
background 180ms ease,
border-color 180ms ease;
}
.mg-sp-button:hover {
transform: translateY(-2px);
}
.mg-sp-button--primary {
background: var(--mg-mango);
color: #18120b !important;
}
.mg-sp-button--primary:hover {
background: #ffb654;
}
.mg-sp-hero__footer {
display: flex;
align-items: center;
gap: 22px;
font-family: var(--mg-mono);
font-size: 9px;
line-height: 1;
letter-spacing: 0.12em;
text-transform: uppercase;
color: rgba(255, 245, 230, 0.52);
}
.mg-sp-hero__line {
width: 60px;
height: 1px;
background: rgba(255, 245, 230, 0.25);
}
/* =========================================================
05. INTRO
========================================================= */
.mg-sp-intro {
padding: 120px 0;
background: var(--mg-bg);
}
.mg-sp-intro__grid {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(300px, 0.65fr);
gap: clamp(60px, 10vw, 150px);
align-items: end;
}
.mg-sp-intro h2 {
max-width: 770px;
}
.mg-sp-intro__copy p {
margin-bottom: 24px;
color: var(--mg-cream-soft);
font-size: 17px;
line-height: 1.75;
}
.mg-sp-intro__copy p:last-child {
margin-bottom: 0;
}
/* =========================================================
06. MOODS
========================================================= */
.mg-sp-moods {
padding: 120px 0;
background: var(--mg-bg-2);
}
.mg-sp-mood-tabs {
display: grid;
grid-template-columns: repeat(4, 1fr);
margin-bottom: 30px;
border-top: 1px solid var(--mg-line);
border-bottom: 1px solid var(--mg-line);
}
.mg-sp-mood-tab {
min-height: 90px;
display: flex;
align-items: center;
gap: 14px;
padding: 18px 20px;
border: 0;
border-right: 1px solid var(--mg-line);
background: transparent;
color: var(--mg-muted);
text-align: left;
cursor: pointer;
transition:
color 180ms ease,
background 180ms ease;
}
.mg-sp-mood-tab:last-child {
border-right: 0;
}
.mg-sp-mood-tab:hover {
color: var(--mg-cream);
background: rgba(255, 245, 230, 0.025);
}
.mg-sp-mood-tab.is-active {
color: var(--mg-cream);
background: var(--mg-bg-3);
}
.mg-sp-mood-tab__number {
flex: 0 0 auto;
font-family: var(--mg-mono);
color: var(--mg-mango);
font-size: 10px;
}
.mg-sp-mood-tab > span:last-child {
font-family: var(--mg-display);
font-size: 21px;
line-height: 1.05;
}
.mg-sp-mood-stage {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(360px, 0.95fr);
min-height: 630px;
background: var(--mg-bg-3);
}
.mg-sp-mood-stage__image {
position: relative;
min-height: 630px;
overflow: hidden;
}
.mg-sp-mood-stage__photo {
position: absolute;
inset: 0;
background-image:
linear-gradient(
0deg,
rgba(20, 17, 14, 0.50),
rgba(20, 17, 14, 0.04)
),
url("YOUR-SAOPAULO-SLOW-LOCAL-IMAGE.webp");
background-position: center;
background-size: cover;
transition:
opacity 220ms ease,
transform 500ms ease;
}
.mg-sp-mood-stage:hover .mg-sp-mood-stage__photo {
transform: scale(1.015);
}
.mg-sp-mood-stage__badge {
position: absolute;
left: 24px;
bottom: 24px;
max-width: 270px;
padding: 18px 20px;
background: rgba(20, 17, 14, 0.9);
backdrop-filter: blur(8px);
border-left: 2px solid var(--mg-mango);
}
.mg-sp-mood-stage__badge span,
.mg-sp-couple-prompt span,
.mg-sp-experience-card__why span,
.mg-sp-area__fit span,
.mg-sp-decision__result span {
display: block;
margin-bottom: 7px;
font-family: var(--mg-mono);
font-size: 9px;
line-height: 1.4;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--mg-mango);
}
.mg-sp-mood-stage__badge strong {
font-family: var(--mg-display);
font-size: 19px;
font-weight: 500;
line-height: 1.15;
}
.mg-sp-mood-stage__content {
display: flex;
flex-direction: column;
justify-content: center;
padding: clamp(42px, 6vw, 82px);
}
.mg-sp-mood-stage__content h3 {
max-width: 550px;
margin-bottom: 24px;
font-family: var(--mg-display);
font-weight: 500;
font-size: clamp(42px, 5vw, 68px);
line-height: 0.98;
}
.mg-sp-mood-stage__lead {
max-width: 570px;
margin-bottom: 38px;
color: var(--mg-cream-soft);
font-size: 16px;
line-height: 1.7;
}
.mg-sp-moment-list {
border-top: 1px solid var(--mg-line);
}
.mg-sp-moment {
display: grid;
grid-template-columns: 34px 1fr;
gap: 8px;
padding: 17px 0;
border-bottom: 1px solid var(--mg-line);
}
.mg-sp-moment > span {
font-family: var(--mg-mono);
font-size: 9px;
color: var(--mg-mango);
}
.mg-sp-moment p {
margin: 0;
color: var(--mg-cream-soft);
font-size: 14px;
line-height: 1.55;
}
.mg-sp-couple-prompt {
margin-top: 30px;
padding-left: 18px;
border-left: 1px solid var(--mg-mango);
}
.mg-sp-couple-prompt p {
max-width: 500px;
margin-bottom: 0;
font-family: var(--mg-display);
font-size: 20px;
line-height: 1.3;
}
/* =========================================================
07. WORTH YOUR TIME
========================================================= */
.mg-sp-worth {
padding: 130px 0;
background: var(--mg-bg);
}
.mg-sp-worth__grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1px;
background: var(--mg-line);
}
.mg-sp-experience-card {
min-width: 0;
background: var(--mg-bg-2);
}
.mg-sp-experience-card__media {
position: relative;
aspect-ratio: 16 / 9;
background-position: center;
background-size: cover;
overflow: hidden;
}
.mg-sp-experience-card__media::after {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(
0deg,
rgba(20, 17, 14, 0.6),
transparent 60%
);
}
.mg-sp-img-neighbourhood {
background-image:
url("YOUR-SAOPAULO-NEIGHBOURHOOD-IMAGE.webp");
}
.mg-sp-img-food {
background-image:
url("YOUR-SAOPAULO-FOOD-IMAGE.webp");
}
.mg-sp-img-art {
background-image:
url("YOUR-SAOPAULO-ART-CULTURE-IMAGE.webp");
}
.mg-sp-img-night {
background-image:
url("YOUR-SAOPAULO-NIGHT-IMAGE.webp");
}
.mg-sp-experience-card__body {
padding: clamp(28px, 4.5vw, 54px);
}
.mg-sp-experience-card__topline {
display: flex;
justify-content: space-between;
margin-bottom: 28px;
font-family: var(--mg-mono);
font-size: 9px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--mg-muted);
}
.mg-sp-experience-card__topline span:first-child {
color: var(--mg-mango);
}
.mg-sp-experience-card h3 {
max-width: 500px;
margin-bottom: 20px;
font-family: var(--mg-display);
font-size: clamp(32px, 3.6vw, 48px);
line-height: 1;
font-weight: 500;
}
.mg-sp-experience-card__body > p {
max-width: 520px;
margin-bottom: 30px;
color: var(--mg-muted);
font-size: 15px;
line-height: 1.7;
}
.mg-sp-experience-card__why {
padding-top: 20px;
border-top: 1px solid var(--mg-line);
}
.mg-sp-experience-card__why p {
margin: 0;
color: var(--mg-cream-soft);
font-size: 14px;
line-height: 1.55;
}
/* =========================================================
08. AREAS
========================================================= */
.mg-sp-areas {
padding: 130px 0;
background: var(--mg-bg-3);
}
.mg-sp-areas__header {
display: grid;
grid-template-columns: 1.2fr 0.65fr;
gap: 80px;
align-items: end;
margin-bottom: 70px;
}
.mg-sp-areas__header > p {
max-width: 430px;
margin: 0;
color: var(--mg-muted);
font-size: 16px;
line-height: 1.7;
}
.mg-sp-area-list {
border-top: 1px solid var(--mg-line);
}
.mg-sp-area {
display: grid;
grid-template-columns: 90px 1fr minmax(280px, 0.65fr);
gap: 30px;
align-items: center;
padding: 34px 0;
border-bottom: 1px solid var(--mg-line);
transition:
padding 180ms ease,
background 180ms ease;
}
.mg-sp-area:hover {
padding-left: 18px;
padding-right: 18px;
background: rgba(255, 245, 230, 0.025);
}
.mg-sp-area__number {
font-family: var(--mg-mono);
font-size: 11px;
color: var(--mg-mango);
}
.mg-sp-area__main h3 {
margin-bottom: 8px;
font-family: var(--mg-display);
font-size: 38px;
line-height: 1;
font-weight: 500;
}
.mg-sp-area__main p {
max-width: 580px;
margin: 0;
color: var(--mg-muted);
font-size: 14px;
line-height: 1.6;
}
.mg-sp-area__fit strong {
display: block;
color: var(--mg-cream-soft);
font-size: 14px;
line-height: 1.55;
font-weight: 500;
}
/* =========================================================
09. DECISION TOOL
========================================================= */
.mg-sp-decision {
padding: 130px 0;
background: var(--mg-bg);
}
.mg-sp-decision__box {
padding: clamp(36px, 7vw, 92px);
border: 1px solid var(--mg-line);
background:
linear-gradient(
135deg,
var(--mg-bg-3),
var(--mg-bg-2)
);
}
.mg-sp-decision h2 {
max-width: 750px;
}
.mg-sp-decision__intro {
margin: 28px 0 50px;
color: var(--mg-muted);
font-size: 16px;
line-height: 1.65;
}
.mg-sp-decision__choices {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
.mg-sp-choice {
display: flex;
flex-direction: column;
align-items: flex-start;
min-height: 110px;
padding: 22px;
border: 1px solid var(--mg-line);
background: rgba(255, 245, 230, 0.015);
color: var(--mg-cream);
text-align: left;
cursor: pointer;
transition:
background 180ms ease,
border-color 180ms ease,
transform 180ms ease;
}
.mg-sp-choice:hover {
transform: translateY(-2px);
border-color: var(--mg-line-strong);
background: rgba(255, 245, 230, 0.035);
}
.mg-sp-choice.is-selected {
border-color: rgba(244, 166, 65, 0.5);
background: rgba(244, 166, 65, 0.08);
}
.mg-sp-choice span {
margin-bottom: 9px;
font-family: var(--mg-display);
font-size: 25px;
line-height: 1.1;
}
.mg-sp-choice small {
color: var(--mg-muted);
font-size: 12px;
line-height: 1.5;
}
.mg-sp-decision__result {
margin-top: 16px;
padding: 24px;
border-left: 2px solid var(--mg-mango);
background: var(--mg-bg);
}
.mg-sp-decision__result p {
margin: 0;
font-family: var(--mg-display);
font-size: 24px;
line-height: 1.25;
}
/* =========================================================
10. PRACTICAL
========================================================= */
.mg-sp-practical {
padding: 120px 0;
background: var(--mg-bg-4);
}
.mg-sp-practical__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
border-top: 1px solid var(--mg-line);
}
.mg-sp-practical article {
min-height: 260px;
padding: 38px 34px;
border-right: 1px solid var(--mg-line);
border-bottom: 1px solid var(--mg-line);
}
.mg-sp-practical article:first-child {
border-left: 1px solid var(--mg-line);
}
.mg-sp-practical article > span {
display: block;
margin-bottom: 40px;
font-family: var(--mg-mono);
font-size: 10px;
color: var(--mg-mango);
}
.mg-sp-practical h3 {
margin-bottom: 16px;
font-family: var(--mg-display);
font-size: 30px;
line-height: 1.05;
font-weight: 500;
}
.mg-sp-practical article p {
margin: 0;
color: var(--mg-muted);
font-size: 14px;
line-height: 1.7;
}
/* =========================================================
11. NEXT
========================================================= */
.mg-sp-next {
padding: 130px 0;
background: var(--mg-bg-2);
}
.mg-sp-next__inner {
display: grid;
grid-template-columns: 1fr 0.85fr;
gap: clamp(50px, 10vw, 140px);
align-items: start;
}
.mg-sp-next__inner > div:first-child > p:last-child {
max-width: 550px;
margin: 28px 0 0;
color: var(--mg-muted);
font-size: 16px;
line-height: 1.7;
}
.mg-sp-next__links {
border-top: 1px solid var(--mg-line);
}
.mg-sp-next__links a {
display: grid;
grid-template-columns: 40px 1fr 20px;
gap: 18px;
align-items: center;
min-height: 92px;
border-bottom: 1px solid var(--mg-line);
transition:
padding 180ms ease,
color 180ms ease;
}
.mg-sp-next__links a:hover {
padding-left: 12px;
color: var(--mg-mango);
}
.mg-sp-next__links span {
font-family: var(--mg-mono);
font-size: 9px;
color: var(--mg-mango);
}
.mg-sp-next__links strong {
font-family: var(--mg-display);
font-size: 22px;
line-height: 1.15;
font-weight: 500;
}
.mg-sp-next__links b {
font-size: 18px;
font-weight: 400;
}
/* =========================================================
12. CLOSE
========================================================= */
.mg-sp-close {
padding: 150px 0;
background: var(--mg-bg);
text-align: center;
}
.mg-sp-close p {
margin-bottom: 22px;
font-family: var(--mg-mono);
font-size: 10px;
letter-spacing: 0.17em;
text-transform: uppercase;
color: var(--mg-muted);
}
.mg-sp-close h2 {
font-size: clamp(56px, 8vw, 108px);
}
.mg-sp-close h2 em {
color: var(--mg-mango);
font-weight: 400;
}
/* =========================================================
13. TABLET
========================================================= */
@media (max-width: 1000px) {
.mg-sp-intro__grid,
.mg-sp-areas__header,
.mg-sp-next__inner {
grid-template-columns: 1fr;
gap: 42px;
}
.mg-sp-mood-tabs {
grid-template-columns: repeat(2, 1fr);
}
.mg-sp-mood-tab:nth-child(2) {
border-right: 0;
}
.mg-sp-mood-tab:nth-child(-n + 2) {
border-bottom: 1px solid var(--mg-line);
}
.mg-sp-mood-stage {
grid-template-columns: 1fr;
}
.mg-sp-mood-stage__image {
min-height: 520px;
}
.mg-sp-area {
grid-template-columns: 60px 1fr;
}
.mg-sp-area__fit {
grid-column: 2 / -1;
}
}
/* =========================================================
14. MOBILE
========================================================= */
@media (max-width: 700px) {
.mg-sp-container {
width: min(calc(100% - 32px), var(--mg-max));
}
.mg-sp-hero {
min-height: 820px;
}
.mg-sp-hero__media {
background-position: 62% center;
}
.mg-sp-hero__overlay {
background:
linear-gradient(
0deg,
rgba(15, 12, 9, 0.98) 0%,
rgba(15, 12, 9, 0.69) 58%,
rgba(15, 12, 9, 0.34) 100%
);
}
.mg-sp-hero__inner {
min-height: 820px;
padding-top: 28px;
padding-bottom: 24px;
}
.mg-sp-breadcrumbs {
gap: 6px;
font-size: 8px;
}
.mg-sp-hero__content {
margin-top: auto;
margin-bottom: 30px;
padding: 100px 0 25px;
}
.mg-sp-hero h1 {
font-size: clamp(64px, 22vw, 88px);
line-height: 0.82;
}
.mg-sp-hero__lead {
font-size: 16px;
line-height: 1.55;
}
.mg-sp-button {
width: 100%;
}
.mg-sp-hero__footer {
align-items: flex-start;
gap: 10px;
flex-direction: column;
}
.mg-sp-hero__line {
display: none;
}
.mg-sp-intro,
.mg-sp-moods,
.mg-sp-worth,
.mg-sp-areas,
.mg-sp-decision,
.mg-sp-practical,
.mg-sp-next {
padding: 86px 0;
}
.mg-sp-close {
padding: 110px 0;
}
.mg-sp-heading {
margin-bottom: 42px;
}
.mg-sp-heading h2,
.mg-sp-intro h2,
.mg-sp-areas h2,
.mg-sp-decision h2,
.mg-sp-next h2 {
font-size: 46px;
}
.mg-sp-mood-tabs {
display: flex;
overflow-x: auto;
margin-inline: -16px;
padding-left: 16px;
border: 0;
scrollbar-width: none;
}
.mg-sp-mood-tabs::-webkit-scrollbar {
display: none;
}
.mg-sp-mood-tab {
flex: 0 0 175px;
min-height: 86px;
border: 1px solid var(--mg-line) !important;
border-right: 0 !important;
}
.mg-sp-mood-tab:last-child {
margin-right: 16px;
border-right: 1px solid var(--mg-line) !important;
}
.mg-sp-mood-tab > span:last-child {
font-size: 18px;
}
.mg-sp-mood-stage {
margin-top: 22px;
}
.mg-sp-mood-stage__image {
min-height: 430px;
}
.mg-sp-mood-stage__content {
padding: 34px 24px 40px;
}
.mg-sp-mood-stage__content h3 {
font-size: 43px;
}
.mg-sp-mood-stage__badge {
left: 16px;
right: 16px;
bottom: 16px;
max-width: none;
}
.mg-sp-worth__grid {
grid-template-columns: 1fr;
}
.mg-sp-experience-card__body {
padding: 30px 24px 36px;
}
.mg-sp-experience-card h3 {
font-size: 38px;
}
.mg-sp-area {
grid-template-columns: 34px 1fr;
gap: 14px;
padding: 28px 0;
}
.mg-sp-area:hover {
padding-left: 0;
padding-right: 0;
background: transparent;
}
.mg-sp-area__main h3 {
font-size: 32px;
}
.mg-sp-area__fit {
grid-column: 2;
}
.mg-sp-decision__box {
padding: 34px 22px;
}
.mg-sp-decision__choices {
grid-template-columns: 1fr;
}
.mg-sp-practical__grid {
grid-template-columns: 1fr;
}
.mg-sp-practical article,
.mg-sp-practical article:first-child {
min-height: 0;
padding: 30px 24px;
border-left: 1px solid var(--mg-line);
border-right: 1px solid var(--mg-line);
}
.mg-sp-practical article > span {
margin-bottom: 24px;
}
.mg-sp-next__links a {
min-height: 82px;
}
.mg-sp-next__links strong {
font-size: 20px;
}
.mg-sp-close h2 {
font-size: clamp(54px, 17vw, 76px);
}
}
/* =========================================================
15. REDUCED MOTION
========================================================= */
@media (prefers-reduced-motion: reduce) {
#mg-sp *,
#mg-sp *::before,
#mg-sp *::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}
/* =========================================================
MANGO GETAWAY — SÃO PAULO CITY v1
========================================================= */
(function () {
"use strict";
const root = document.getElementById("mg-sp");
if (!root) {
return;
}
/* =====================================================
01. MOOD DATA
====================================================== */
const moods = {
slow: {
label: "SLOW & LOCAL",
title: "Let the neighbourhood be the plan.",
description:
"Pick one part of the city and give it enough time to surprise you. Coffee, independent shops, a long lunch and nowhere you urgently need to be next.",
bestFor:
"Wandering without rushing",
image:
"YOUR-SAOPAULO-SLOW-LOCAL-IMAGE.webp",
moments: [
"Start somewhere you can walk rather than building the day around transfers.",
"Leave room for the place one of you notices along the way.",
"Finish with dinner nearby instead of racing across the city again."
],
question:
"Would you rather choose one great neighbourhood today or cross the city ticking things off?"
},
culture: {
label: "CULTURE & CURIOSITY",
title: "Give yourselves something to talk about.",
description:
"Build the day around art, architecture, design or a part of São Paulo neither of you fully understands yet. The objective is not simply to look. It is to react together.",
bestFor:
"Couples who like discovering ideas together",
image:
"YOUR-SAOPAULO-CULTURE-IMAGE.webp",
moments: [
"Choose one strong cultural anchor rather than trying to cover everything.",
"Give yourselves time afterwards to walk, eat or talk nearby.",
"Let each person choose one thing the other might not have picked."
],
question:
"Which is more fun for you: loving the same thing, or arguing about whether it was actually good?"
},
food: {
label: "EAT YOUR WAY THROUGH IT",
title: "Let the table decide where you go.",
description:
"São Paulo makes an excellent city for couples who plan from meal to meal. Choose one restaurant, market or food neighbourhood worth travelling for and let the rest of the day form around it.",
bestFor:
"Couples who remember trips through food",
image:
"YOUR-SAOPAULO-FOOD-MOOD-IMAGE.webp",
moments: [
"Choose one meal important enough to reserve or plan around.",
"Use cafés, bakeries and small stops to connect the gaps instead of forcing another attraction.",
"Leave enough time at dinner that nobody is checking the clock."
],
question:
"If you could remember only one meal from São Paulo, would you want it refined, local, unexpected or completely indulgent?"
},
night: {
label: "STAY OUT LATE",
title: "Give São Paulo one of your nights.",
description:
"Start slower, protect your energy and allow the evening to develop. The best late-night plan often has a beginning without forcing an exact ending.",
bestFor:
"Couples who want the city after dark",
image:
"YOUR-SAOPAULO-NIGHT-MOOD-IMAGE.webp",
moments: [
"Keep the afternoon lighter so the evening does not begin with both of you exhausted.",
"Start with one place you deliberately chose.",
"Leave the following morning spacious enough that staying out feels worth it."
],
question:
"Would you rather know exactly where the night is going or start somewhere good and see what happens?"
}
};
/* =====================================================
02. MOOD ELEMENTS
====================================================== */
const moodTabs =
root.querySelectorAll(".mg-sp-mood-tab");
const moodPhoto =
root.querySelector("#mg-sp-mood-photo");
const moodLabel =
root.querySelector("#mg-sp-mood-label");
const moodTitle =
root.querySelector("#mg-sp-mood-title");
const moodDescription =
root.querySelector("#mg-sp-mood-description");
const moodBestFor =
root.querySelector("#mg-sp-best-for");
const moodMoment1 =
root.querySelector("#mg-sp-moment-1");
const moodMoment2 =
root.querySelector("#mg-sp-moment-2");
const moodMoment3 =
root.querySelector("#mg-sp-moment-3");
const moodQuestion =
root.querySelector("#mg-sp-couple-question");
/* =====================================================
03. CHANGE MOOD
====================================================== */
function setMood(moodKey) {
const mood = moods[moodKey];
if (!mood) {
return;
}
moodTabs.forEach(function (tab) {
const active =
tab.dataset.mood === moodKey;
tab.classList.toggle(
"is-active",
active
);
tab.setAttribute(
"aria-selected",
active ? "true" : "false"
);
});
if (moodPhoto) {
moodPhoto.style.opacity = "0";
window.setTimeout(function () {
moodPhoto.style.backgroundImage =
'linear-gradient(0deg, rgba(20,17,14,.50), rgba(20,17,14,.04)), url("' +
mood.image +
'")';
moodPhoto.style.opacity = "1";
}, 130);
}
if (moodLabel) {
moodLabel.textContent = mood.label;
}
if (moodTitle) {
moodTitle.textContent = mood.title;
}
if (moodDescription) {
moodDescription.textContent =
mood.description;
}
if (moodBestFor) {
moodBestFor.textContent =
mood.bestFor;
}
if (moodMoment1) {
moodMoment1.textContent =
mood.moments[0];
}
if (moodMoment2) {
moodMoment2.textContent =
mood.moments[1];
}
if (moodMoment3) {
moodMoment3.textContent =
mood.moments[2];
}
if (moodQuestion) {
moodQuestion.textContent =
mood.question;
}
}
moodTabs.forEach(function (tab) {
tab.addEventListener(
"click",
function () {
setMood(
this.dataset.mood
);
}
);
});
/* =====================================================
04. COUPLE DECISION TOOL
====================================================== */
const choices =
root.querySelectorAll(".mg-sp-choice");
const choiceResult =
root.querySelector(
"#mg-sp-choice-result p"
);
const choiceCopy = {
food:
"Start with the meal you most want to share, then keep the rest of your plans in the same part of the city.",
wander:
"Choose one neighbourhood with enough cafés, streets and places to discover on foot. Let that become the day.",
culture:
"Choose one strong cultural experience, then leave time afterwards for the two of you to actually talk about it.",
night:
"Keep the daytime lighter, choose where the evening begins and protect tomorrow morning from unnecessary plans."
};
choices.forEach(function (choice) {
choice.addEventListener(
"click",
function () {
const key =
this.dataset.choice;
choices.forEach(function (item) {
item.classList.remove(
"is-selected"
);
});
this.classList.add(
"is-selected"
);
if (
choiceResult &&
choiceCopy[key]
) {
choiceResult.textContent =
choiceCopy[key];
}
}
);
});
/* =====================================================
05. SMOOTH INTERNAL LINKS
====================================================== */
const internalLinks =
root.querySelectorAll(
'a[href^="#"]'
);
internalLinks.forEach(function (link) {
link.addEventListener(
"click",
function (event) {
const selector =
this.getAttribute("href");
if (
!selector ||
selector === "#"
) {
return;
}
const target =
root.querySelector(selector);
if (!target) {
return;
}
event.preventDefault();
target.scrollIntoView({
behavior: "smooth",
block: "start"
});
}
);
});
})();
SÃO PAULO · BRAZIL
São Paulo
for two.
Come for the city.
Stay for the neighbourhoods, long dinners,
late nights and the feeling that there is
always somewhere else to discover together.
Choose your São Paulo
THE CITY
São Paulo is better when
you stop trying to see all of it.
This is a city to experience in pieces.
One neighbourhood. One table.
One gallery. One late drink.
One unexpected detour.
Mango Getaway helps you choose the parts
that fit the kind of day the two of you
actually want.
START HERE
How do you want São Paulo to feel?
Pick the mood that sounds most like your day.
BEST FOR
Wandering without rushing
SLOW & LOCAL
Let the neighbourhood be the plan.
Pick one part of the city and give it
enough time to surprise you. Coffee,
independent shops, a long lunch and
nowhere you urgently need to be next.
01
Start somewhere you can walk rather
than building the day around transfers.
02
Leave room for the place one of you
notices along the way.
03
Finish with dinner nearby instead of
racing across the city again.
ASK EACH OTHER
Would you rather choose one great
neighbourhood today or cross the city
ticking things off?
WORTH MAKING TIME FOR
Four kinds of São Paulo days
we would actually build a trip around.
01
HALF DAY
Choose one neighbourhood
and stay there.
São Paulo becomes far more enjoyable
when you stop treating distance as a
challenge to conquer.
WHY TOGETHER
It gives you space to notice,
react and decide the day as a pair.
02
EVENING
Make dinner
the main event.
Pick somewhere worth travelling for,
arrive hungry and leave the evening
open around it.
WHY TOGETHER
Great city memories often begin
when there is nowhere else you
are supposed to be.
03
DAYTIME
Find something
you disagree about.
Art, architecture and design are
more memorable when both of you
actually have an opinion.
WHY TOGETHER
The conversation afterwards
can become as good as the
experience itself.
04
AFTER DARK
Give yourselves
one properly late night.
Start with a drink.
See where the city takes you.
Keep the following morning light.
WHY TOGETHER
Sometimes the memory is simply
that neither of you wanted
the night to end.
01
Jardins
For couples who want polished,
convenient and easy-to-build days.
CHOOSE THIS IF
You want good access without
sacrificing date-night energy.
02
Pinheiros
For food, coffee, creative energy
and days that can stretch into night.
CHOOSE THIS IF
You like discovering places
as you go.
03
Vila Madalena
For a more social day with colour,
street life and somewhere to
continue afterwards.
CHOOSE THIS IF
You want less structure
and more atmosphere.
04
Liberdade
For couples who want the city
to feel distinctly different
for a few hours.
CHOOSE THIS IF
Food and cultural curiosity
usually shape your days.
BEFORE YOU BUILD THE DAY
Pick one thing
you both want.
São Paulo rewards couples who leave
enough space between plans.
YOUR SÃO PAULO STARTING POINT
Choose one above and build the rest
of the day around it.
MANGO GETAWAY NOTES
What changes the experience.
01
Distance matters.
Build days geographically.
Crossing the city repeatedly can
consume the time you came to enjoy.
02
Leave breathing room.
Two strong plans are often better
than six places squeezed together.
03
Protect the evening.
If dinner or nightlife matters,
avoid arriving there already tired
from an overloaded day.
NEXT
Now choose what deserves
a place in your trip.
Explore stays, experiences and future
Mango Getaway couple itineraries
for São Paulo.
Travel Designed for Two.
Create More
Shared Memories.