/* =========================================================
MANGO GETAWAY — MYKONOS ACTIVITIES
MG-MYK-ACT V0.6.0
========================================================= */
.mgact6 {
--black: #14110e;
--deep: #181410;
--brown: #211c17;
--brown-2: #29221b;
--cream: #f0e3d1;
--mango: #f4a641;
--gold: #d9973f;
--copy: rgba(255,245,230,.70);
--soft: rgba(255,245,230,.40);
--line: rgba(255,245,230,.11);
width: 100%;
overflow: hidden;
background: var(--black);
color: var(--cream);
font-family: "DM Sans", Arial, sans-serif;
}
.mgact6 *,
.mgact6 *::before,
.mgact6 *::after {
box-sizing: border-box;
}
/* TYPOGRAPHY LOCK */
.mgact6,
.mgact6 p,
.mgact6 a,
.mgact6 button,
.mgact6 span,
.mgact6 small,
.mgact6 nav {
font-family: "DM Sans", Arial, sans-serif;
}
.mgact6 h1,
.mgact6 h2,
.mgact6 h3,
.mgact6 h4,
.mgact6 h1 em,
.mgact6 h2 em {
font-family:
"Cormorant Garamond",
Georgia,
serif !important;
}
.mgact6 h1 em,
.mgact6 h2 em {
font-style: italic;
}
.mgact6-meta,
.mgact6-direction__number,
.mgact6-day-grid article > small {
font-family:
"DM Mono",
monospace !important;
}
/* SHELL */
.mgact6-shell {
width: min(1180px, calc(100% - 48px));
margin-inline: auto;
}
.mgact6-shell--narrow {
width: min(980px, calc(100% - 48px));
}
.mgact6-kicker {
margin: 0 0 17px;
color: var(--mango);
font-size: .61rem;
font-weight: 700;
letter-spacing: .19em;
text-transform: uppercase;
}
/* =========================================================
HERO
========================================================= */
.mgact6-hero {
position: relative;
min-height: min(860px, 92vh);
background:
linear-gradient(
90deg,
rgba(20,17,14,.95),
rgba(20,17,14,.63),
rgba(20,17,14,.16)
),
var(--hero);
background-size: cover;
background-position: center;
}
.mgact6-hero__shade {
position: absolute;
inset: 0;
background:
linear-gradient(
to bottom,
transparent 55%,
rgba(20,17,14,.9)
);
}
.mgact6-hero__inner {
position: relative;
z-index: 2;
min-height: inherit;
padding: 28px 0 50px;
display: grid;
grid-template-rows: auto 1fr;
}
.mgact6-breadcrumb {
display: flex;
flex-wrap: wrap;
gap: 7px;
color: rgba(255,245,230,.40);
font-size: .57rem !important;
letter-spacing: .08em;
text-transform: uppercase;
}
.mgact6-breadcrumb a {
color: inherit !important;
text-decoration: none !important;
}
.mgact6-breadcrumb a:hover {
color: var(--gold) !important;
}
.mgact6-hero__copy {
max-width: 850px;
align-self: center;
}
.mgact6-hero h1 {
margin: 0 !important;
padding-bottom: clamp(40px, 4vw, 58px);
color: var(--cream);
font-size: clamp(4.2rem, 7.8vw, 7.7rem) !important;
font-weight: 400 !important;
letter-spacing: -.055em;
line-height: .89 !important;
}
.mgact6-hero h1 em {
display: block;
color: var(--mango);
line-height: .93;
}
.mgact6-hero__copy > p:not(.mgact6-kicker) {
max-width: 620px;
margin: 0 0 30px;
color: var(--copy);
font-size: 1rem;
line-height: 1.7;
}
.mgact6-primary {
min-height: 52px;
padding: 0 22px;
display: inline-flex;
align-items: center;
gap: 35px;
border: 1px solid var(--mango);
border-radius: 999px;
background: var(--mango);
color: var(--black) !important;
font-size: .68rem;
font-weight: 700;
text-decoration: none !important;
}
/* =========================================================
DIRECTIONS
MATCHES MYKONOS PARENT
========================================================= */
.mgact6-directions {
padding: 95px 0 105px;
background: var(--deep);
}
.mgact6-heading h2 {
max-width: 760px;
margin: 0;
color: var(--cream);
font-size: clamp(3.4rem, 6vw, 5.5rem);
font-weight: 400;
line-height: .92;
letter-spacing: -.05em;
}
.mgact6-heading h2 em {
color: var(--mango);
}
.mgact6-heading > p:last-child {
max-width: 650px;
margin: 23px 0 0;
color: var(--copy);
font-size: .86rem;
line-height: 1.7;
}
.mgact6-direction-grid {
margin-top: 48px;
display: grid;
grid-template-columns: repeat(5, minmax(0,1fr));
gap: 10px;
}
.mgact6-direction {
position: relative;
min-height: 190px;
padding: 18px;
display: flex;
flex-direction: column;
border: 1px solid var(--line);
border-radius: 15px;
background: var(--brown);
color: var(--cream) !important;
text-decoration: none !important;
}
.mgact6-direction:hover,
.mgact6-direction.is-current {
border-color: var(--mango);
}
.mgact6-direction__number {
color: var(--soft);
font-size: .52rem;
}
.mgact6-direction small {
margin-top: auto;
margin-bottom: 9px;
color: var(--mango);
font-size: .50rem;
font-weight: 700;
letter-spacing: .08em;
}
.mgact6-direction strong {
color: var(--mango);
font-family:
"Cormorant Garamond",
Georgia,
serif !important;
font-size: 1.6rem;
font-weight: 500;
line-height: .95;
}
/* =========================================================
CATEGORY
========================================================= */
.mgact6-category {
padding: 110px 0;
scroll-margin-top: 25px;
background: var(--black);
}
.mgact6-category--alt {
background: var(--brown);
}
.mgact6-category__header {
margin-bottom: 37px;
padding: 36px;
display: grid;
grid-template-columns: minmax(0,1.3fr) minmax(300px,.7fr);
gap: 40px;
border: 1px solid var(--line);
border-radius: 19px;
background: rgba(0,0,0,.12);
}
.mgact6-category__header h2 {
margin: 0 0 15px;
color: var(--mango);
font-size: clamp(3rem, 5vw, 4.5rem);
font-weight: 400;
line-height: .95;
}
.mgact6-category__header
> div > p:last-child {
max-width: 650px;
margin: 0;
color: var(--copy);
font-size: .82rem;
line-height: 1.7;
}
.mgact6-category__header aside {
padding-left: 28px;
border-left: 1px solid var(--line);
}
.mgact6-category__header aside small {
color: var(--mango);
font-size: .53rem;
font-weight: 700;
letter-spacing: .13em;
}
.mgact6-category__header aside p {
margin: 14px 0 0;
color: var(--cream);
font-family:
"Cormorant Garamond",
Georgia,
serif !important;
font-size: 1.35rem;
line-height: 1.3;
}
/* =========================================================
EXPERIENCES
========================================================= */
.mgact6-experience-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0,1fr));
gap: 15px;
}
.mgact6-experience {
overflow: hidden;
display: flex;
flex-direction: column;
border: 1px solid var(--line);
background: var(--deep);
transition:
border-color .18s ease,
transform .18s ease;
}
.mgact6-experience:hover {
transform: translateY(-3px);
border-color: rgba(217,151,63,.38);
}
.mgact6-experience.is-saved {
border-color: var(--gold);
}
.mgact6-experience__image {
position: relative;
min-height: 270px;
background:
linear-gradient(
to top,
rgba(20,17,14,.75),
transparent
),
var(--image);
background-size: cover;
background-position: center;
}
.mgact6-experience__image span {
position: absolute;
left: 16px;
bottom: 16px;
padding: 7px 10px;
border: 1px solid rgba(255,245,230,.15);
border-radius: 999px;
background: rgba(20,17,14,.72);
color: var(--cream);
font-size: .49rem;
font-weight: 700;
letter-spacing: .10em;
}
.mgact6-experience__body {
flex: 1;
padding: 23px;
display: flex;
flex-direction: column;
}
.mgact6-meta {
margin: 0 0 11px;
color: var(--mango);
font-size: .51rem;
letter-spacing: .05em;
}
.mgact6-experience h3 {
margin: 0 0 13px !important;
color: var(--cream) !important;
font-size: 1.95rem !important;
font-weight: 500 !important;
line-height: 1 !important;
}
.mgact6-experience__intro {
margin: 0 0 18px;
color: var(--copy);
font-size: .72rem;
line-height: 1.6;
}
.mgact6-detail {
padding: 12px 0;
display: grid;
grid-template-columns: 105px minmax(0,1fr);
gap: 12px;
border-top: 1px solid var(--line);
}
.mgact6-detail:last-of-type {
border-bottom: 1px solid var(--line);
}
.mgact6-detail small {
color: var(--soft);
font-size: .48rem;
font-weight: 700;
}
.mgact6-detail p {
margin: 0;
color: rgba(255,245,230,.72);
font-size: .64rem;
line-height: 1.5;
}
.mgact6-experience__actions {
margin-top: auto;
padding-top: 19px;
display: grid;
gap: 6px;
}
/* BUTTON RESETS */
.mgact6 button.mgact6-save,
.mgact6 button.mgact6-options {
appearance: none !important;
width: 100%;
min-height: 44px;
margin: 0 !important;
padding: 0 12px !important;
border-radius: 2px !important;
background: transparent !important;
box-shadow: none !important;
font-size: .59rem !important;
cursor: pointer;
}
.mgact6 button.mgact6-save {
border: 1px solid var(--line) !important;
color: rgba(255,245,230,.68) !important;
}
.mgact6 button.mgact6-save[aria-pressed="true"] {
border-color: var(--gold) !important;
color: var(--gold) !important;
background: rgba(217,151,63,.06) !important;
}
.mgact6 button.mgact6-options {
display: flex;
align-items: center;
justify-content: space-between;
border: 1px solid rgba(217,151,63,.44) !important;
color: var(--cream) !important;
}
/* =========================================================
MATCH
========================================================= */
.mgact6-match {
padding: 100px 0;
background: var(--brown-2);
}
.mgact6-match[hidden] {
display: none !important;
}
.mgact6-match h2 {
max-width: 780px;
margin: 0;
color: var(--cream);
font-size: clamp(3.4rem,6vw,5.5rem);
font-weight: 400;
line-height: .91;
}
.mgact6-match h2 em {
color: var(--mango);
}
.mgact6-match > div > p:last-child {
max-width: 690px;
margin: 27px 0 0;
color: var(--cream);
font-family:
"Cormorant Garamond",
Georgia,
serif !important;
font-size: 1.7rem;
line-height: 1.3;
}
/* =========================================================
BOOKING
========================================================= */
.mgact6-booking {
padding: 105px 0;
background: var(--deep);
scroll-margin-top: 25px;
}
.mgact6-booking__empty {
margin-top: 40px;
padding: 28px 0;
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
color: var(--copy);
font-size: .72rem;
}
.mgact6-booking__active {
margin-top: 40px;
}
.mgact6-booking__active[hidden] {
display: none !important;
}
.mgact6-booking__active header {
padding-bottom: 22px;
border-bottom: 1px solid var(--line);
}
.mgact6-booking__active header small {
color: var(--mango);
font-size: .50rem;
font-weight: 700;
}
.mgact6-booking__active h3 {
margin: 7px 0;
color: var(--cream);
font-size: 2.3rem;
font-weight: 500;
}
.mgact6-booking__active p {
margin: 0;
color: var(--copy);
font-size: .70rem;
}
.mgact6-operator {
margin-top: 10px;
padding: 20px;
display: grid;
grid-template-columns: minmax(0,1fr) 190px;
gap: 25px;
border: 1px solid var(--line);
background: var(--brown);
}
.mgact6-operator h4 {
margin: 5px 0 8px !important;
color: var(--cream) !important;
font-size: 1.7rem !important;
}
.mgact6-operator p {
color: var(--copy);
}
.mgact6-operator-actions {
display: grid;
gap: 6px;
}
/* =========================================================
DAY BUILDER
========================================================= */
.mgact6-day {
padding: 105px 0;
background: var(--black);
}
.mgact6-day-grid {
margin-top: 43px;
display: grid;
grid-template-columns: repeat(4,minmax(0,1fr));
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.mgact6-day-grid article {
position: relative;
min-height: 245px;
padding: 22px;
border-right: 1px solid var(--line);
}
.mgact6-day-grid article:last-child {
border-right: 0;
}
.mgact6-day-grid article > small {
color: var(--mango);
font-size: .49rem;
}
.mgact6-day-grid h3 {
margin: 25px 0 14px;
color: var(--cream);
font-size: 1.7rem;
font-weight: 500;
}
.mgact6-day-selection {
min-height: 50px;
color: var(--soft);
font-size: .61rem;
}
.mgact6-day-grid button {
appearance: none;
margin-top: 20px;
padding: 0;
border: 0;
background: transparent;
color: var(--mango);
font-size: .55rem;
cursor: pointer;
}
.mgact6-day-choices {
position: absolute;
z-index: 5;
left: 12px;
right: 12px;
bottom: 12px;
padding: 8px;
border: 1px solid var(--gold);
background: var(--brown);
}
.mgact6-day-choices[hidden] {
display: none !important;
}
.mgact6-day-choice {
width: 100%;
padding: 9px;
display: block;
color: var(--cream) !important;
text-align: left;
}
.mgact6-day-note {
color: var(--soft);
font-family:
"Cormorant Garamond",
Georgia,
serif !important;
font-size: 1rem;
font-style: italic;
}
/* =========================================================
SHORTLIST
========================================================= */
.mgact6-shortlist {
padding: 105px 0;
background: var(--brown);
}
.mgact6-shortlist__header {
padding-bottom: 38px;
display: grid;
grid-template-columns: minmax(0,1fr) auto;
gap: 35px;
border-bottom: 1px solid var(--line);
}
.mgact6-shortlist h2 {
margin: 0;
color: var(--cream);
font-size: clamp(3.4rem,6vw,5.4rem);
font-weight: 400;
line-height: .9;
}
.mgact6-shortlist h2 em {
color: var(--mango);
}
.mgact6-shortlist__header
> div:first-child > p:last-child {
max-width: 620px;
margin: 21px 0 0;
color: var(--copy);
font-size: .75rem;
}
.mgact6-counts {
display: flex;
gap: 25px;
}
.mgact6-counts div {
text-align: right;
}
.mgact6-counts strong {
display: block;
color: var(--mango);
font-family:
"Cormorant Garamond",
Georgia,
serif;
font-size: 3rem;
font-weight: 400;
}
.mgact6-counts span {
color: var(--soft);
font-size: .46rem;
}
.mgact6-shortlist-grid {
padding-top: 30px;
display: grid;
grid-template-columns: repeat(2,minmax(0,1fr));
gap: 10px;
}
.mgact6-shortlist-item {
padding: 20px;
border: 1px solid var(--line);
background: var(--deep);
}
.mgact6-shortlist-item h4 {
margin: 15px 0 8px;
color: var(--cream);
font-size: 1.7rem;
}
.mgact6-shortlist-item p {
color: var(--copy);
font-size: .63rem;
}
.mgact6-shortlist-actions {
margin-top: 30px;
display: flex;
gap: 7px;
}
.mgact6-shortlist-actions button {
min-height: 42px;
padding: 0 14px;
border: 1px solid var(--gold);
border-radius: 999px;
background: transparent;
color: var(--cream);
font-size: .57rem;
cursor: pointer;
}
/* =========================================================
JOURNEYS
========================================================= */
.mgact6-journeys {
position: relative;
min-height: 650px;
padding: 100px 0;
background:
linear-gradient(
90deg,
rgba(20,17,14,.94),
rgba(20,17,14,.45)
),
var(--journey);
background-size: cover;
background-position: center;
}
.mgact6-journeys__shade {
position: absolute;
inset: 0;
background:
linear-gradient(
to top,
rgba(20,17,14,.65),
transparent
);
}
.mgact6-journeys > .mgact6-shell {
position: relative;
z-index: 2;
}
.mgact6-journeys h2 {
max-width: 780px;
margin: 0;
color: var(--cream);
font-size: clamp(3.5rem,6vw,5.6rem);
font-weight: 400;
line-height: .9;
}
.mgact6-journeys h2 em {
color: var(--mango);
}
.mgact6-journey-grid {
margin-top: 42px;
display: grid;
grid-template-columns: repeat(3,minmax(0,1fr));
gap: 10px;
}
.mgact6-journey-grid a {
min-height: 210px;
padding: 20px;
display: flex;
flex-direction: column;
border: 1px solid rgba(255,245,230,.16);
background: rgba(20,17,14,.45);
color: var(--cream) !important;
text-decoration: none !important;
}
.mgact6-journey-grid a:hover {
border-color: var(--mango);
}
.mgact6-journey-grid h3 {
margin: auto 0 7px;
color: var(--cream);
font-size: 1.8rem;
}
.mgact6-journey-grid p {
color: var(--copy);
font-size: .62rem;
}
.mgact6-journey-grid span {
color: var(--mango);
font-size: .55rem;
}
/* =========================================================
DISCLOSURE
========================================================= */
.mgact6-disclosure {
padding: 27px 0;
background: #0c0a08;
}
.mgact6-disclosure p {
margin: 0;
color: rgba(255,245,230,.32);
font-size: .57rem;
line-height: 1.6;
text-align: center;
}
/* =========================================================
RESPONSIVE
========================================================= */
@media (max-width: 950px) {
.mgact6-direction-grid {
grid-template-columns: repeat(2,minmax(0,1fr));
}
.mgact6-experience-grid {
grid-template-columns: repeat(2,minmax(0,1fr));
}
.mgact6-day-grid {
grid-template-columns: repeat(2,minmax(0,1fr));
}
}
@media (max-width: 700px) {
.mgact6-shell,
.mgact6-shell--narrow {
width: calc(100% - 32px);
}
.mgact6-hero h1 {
font-size: clamp(3.4rem,16vw,5rem) !important;
padding-bottom: 38px;
}
.mgact6-direction-grid,
.mgact6-experience-grid,
.mgact6-day-grid,
.mgact6-shortlist-grid,
.mgact6-journey-grid {
grid-template-columns: 1fr;
}
.mgact6-direction {
min-height: 135px;
}
.mgact6-category__header {
padding: 26px;
grid-template-columns: 1fr;
}
.mgact6-category__header aside {
padding-left: 0;
padding-top: 24px;
border-left: 0;
border-top: 1px solid var(--line);
}
.mgact6-detail {
grid-template-columns: 1fr;
gap: 5px;
}
.mgact6-shortlist__header {
grid-template-columns: 1fr;
}
.mgact6-counts div {
text-align: left;
}
.mgact6-operator {
grid-template-columns: 1fr;
}
}
/* =========================================================
MANGO GETAWAY — MYKONOS ACTIVITIES
MG-MYK-ACT V0.6.0
FUNCTIONS:
- Multi-save experiences
- Hash-aware parent → child navigation
- Multiple operators per experience
- Operator saves
- Build Our Day
- Shortlist
- Print / PDF
- localStorage persistence
========================================================= */
(function () {
"use strict";
const STORAGE_KEY =
"mg_mykonos_activities_v060";
function boot() {
const page =
document.querySelector(".mgact6");
if (!page) {
return;
}
if (
page.dataset.ready === "true"
) {
return;
}
page.dataset.ready =
"true";
init(page);
}
function init(page) {
let state =
load();
/* =================================================
DEFAULT
================================================= */
function defaultState() {
return {
experiences: [],
operators: [],
activeBooking: "",
day: {
morning: "",
afternoon: "",
sunset: "",
night: ""
}
};
}
/* =================================================
STORAGE
================================================= */
function load() {
try {
const parsed =
JSON.parse(
localStorage.getItem(
STORAGE_KEY
)
);
return {
...defaultState(),
...(parsed || {}),
day: {
...defaultState().day,
...(parsed?.day || {})
}
};
} catch (error) {
return defaultState();
}
}
function save() {
try {
localStorage.setItem(
STORAGE_KEY,
JSON.stringify(state)
);
} catch (error) {}
}
/* =================================================
HELPERS
================================================= */
function clean(value) {
return String(
value || ""
).trim();
}
function esc(value) {
return clean(value)
.replaceAll("&", "&")
.replaceAll("", ">")
.replaceAll('"', """)
.replaceAll("'", "'");
}
function cards() {
return Array.from(
page.querySelectorAll(
".mgact6-experience[data-id]"
)
);
}
function cardById(id) {
return (
cards().find(
function (card) {
return (
card.dataset.id === id
);
}
) ||
null
);
}
function liveOperators() {
return Array.from(
page.querySelectorAll(
".mgact6-partner-source [data-live='true']"
)
);
}
function operatorById(id) {
return (
liveOperators().find(
function (operator) {
return (
operator.dataset.operatorId ===
id
);
}
) ||
null
);
}
function toggle(array, id) {
const index =
array.indexOf(id);
if (index === -1) {
array.push(id);
return true;
}
array.splice(
index,
1
);
return false;
}
/* =================================================
ANCHOR CONTINUITY
================================================= */
function renderActiveAnchor() {
const hash =
window.location.hash
.replace("#", "");
page.querySelectorAll(
".mgact6-direction"
)
.forEach(
function (link) {
link.classList.toggle(
"is-current",
link.dataset.direction === hash
);
}
);
}
/* =================================================
EXPERIENCE SAVE
================================================= */
function toggleExperience(card) {
if (!card) {
return;
}
const id =
card.dataset.id;
const selected =
toggle(
state.experiences,
id
);
if (!selected) {
Object.keys(
state.day
)
.forEach(
function (part) {
if (
state.day[part] === id
) {
state.day[part] =
"";
}
}
);
}
save();
render();
}
function renderCards() {
cards().forEach(
function (card) {
const selected =
state.experiences
.includes(
card.dataset.id
);
card.classList.toggle(
"is-saved",
selected
);
const button =
card.querySelector(
".mgact6-save"
);
if (button) {
button.setAttribute(
"aria-pressed",
selected
? "true"
: "false"
);
button.innerHTML =
selected
? "
♥ Saved for us "
: "
♡ This feels like us ";
}
const options =
card.querySelector(
".mgact6-options"
);
if (options) {
options.hidden =
!selected;
}
}
);
}
/* =================================================
MATCH REFLECTION
================================================= */
function renderMatch() {
const match =
page.querySelector(
"#our-mykonos-match"
);
const output =
page.querySelector(
"#mgact6-match-copy"
);
if (
!match ||
!output
) {
return;
}
if (
state.experiences.length < 2
) {
match.hidden =
true;
return;
}
match.hidden =
false;
const categories =
state.experiences
.map(
function (id) {
return (
cardById(id)
?.dataset.category ||
""
);
}
);
const has =
function (category) {
return categories
.includes(
category
);
};
if (
has("water") &&
has("move-together")
) {
output.textContent =
"Active, exploratory and happiest when the day keeps moving.";
}
else if (
has("taste-mykonos") &&
has("slow-down")
) {
output.textContent =
"Food-led, unhurried and built around staying longer.";
}
else if (
has("try-something-different") &&
has("move-together")
) {
output.textContent =
"Curious, playful and willing to share a few firsts.";
}
else if (
has("water") &&
has("slow-down")
) {
output.textContent =
"Blue water, plenty of breathing room and very little rushing.";
}
else {
output.textContent =
"Experience-led, balanced and deliberately yours.";
}
}
/* =================================================
BOOKING
================================================= */
function openBooking(id) {
state.activeBooking =
id;
save();
renderBooking();
page.querySelector(
"#booking-options"
)
?.scrollIntoView({
behavior: "smooth",
block: "start"
});
}
function renderBooking() {
const empty =
page.querySelector(
"#mgact6-booking-empty"
);
const active =
page.querySelector(
"#mgact6-booking-active"
);
const title =
page.querySelector(
"#mgact6-booking-title"
);
const feel =
page.querySelector(
"#mgact6-booking-feel"
);
const list =
page.querySelector(
"#mgact6-operators"
);
const card =
cardById(
state.activeBooking
);
if (!card) {
empty.hidden =
false;
active.hidden =
true;
return;
}
empty.hidden =
true;
active.hidden =
false;
title.textContent =
card.dataset.title;
feel.textContent =
card.dataset.feel;
list.innerHTML =
"";
const operators =
liveOperators()
.filter(
function (operator) {
return (
operator.dataset.experienceId ===
state.activeBooking
);
}
);
if (
operators.length === 0
) {
list.innerHTML =
`
Mango is still curating the bookable options
for this experience. Keep the experience saved —
it does not need a commercial partner to deserve
a place on your shortlist.
`;
return;
}
operators.forEach(
function (operator) {
const id =
operator.dataset.operatorId;
const selected =
state.operators
.includes(id);
const element =
document.createElement(
"article"
);
element.className =
"mgact6-operator";
element.innerHTML =
`
${esc(
operator.dataset.label
)}
${esc(
operator.dataset.name
)}
${esc(
operator.dataset.why
)}
${esc(
operator.dataset.price
)}
·
${esc(
operator.dataset.fit
)}
Mango Couple Benefit:
${esc(
operator.dataset.benefit
)}
`;
list.appendChild(
element
);
}
);
}
/* =================================================
DAY BUILDER
================================================= */
function renderDay() {
Object.keys(
state.day
)
.forEach(
function (part) {
const selection =
page.querySelector(
`[data-selection="${part}"]`
);
const choices =
page.querySelector(
`[data-choices="${part}"]`
);
const selected =
cardById(
state.day[part]
);
if (selection) {
selection.textContent =
selected
? selected.dataset.title
: "Leave it open";
}
if (!choices) {
return;
}
choices.innerHTML =
"";
state.experiences
.map(cardById)
.filter(Boolean)
.filter(
function (card) {
return clean(
card.dataset.dayparts
)
.split(",")
.map(
function (value) {
return value.trim();
}
)
.includes(part);
}
)
.forEach(
function (card) {
const button =
document.createElement(
"button"
);
button.type =
"button";
button.className =
"mgact6-day-choice";
button.dataset
.assignPart =
part;
button.dataset
.assignExperience =
card.dataset.id;
button.textContent =
card.dataset.title;
choices.appendChild(
button
);
}
);
const leaveOpen =
document.createElement(
"button"
);
leaveOpen.type =
"button";
leaveOpen.className =
"mgact6-day-choice";
leaveOpen.dataset
.assignPart =
part;
leaveOpen.dataset
.assignExperience =
"";
leaveOpen.textContent =
"Leave this part open";
choices.appendChild(
leaveOpen
);
}
);
}
/* =================================================
SHORTLIST
================================================= */
function renderShortlist() {
const grid =
page.querySelector(
"#mgact6-shortlist-grid"
);
const operatorGrid =
page.querySelector(
"#mgact6-shortlist-operators"
);
const experienceCount =
page.querySelector(
"#mgact6-experience-count"
);
const operatorCount =
page.querySelector(
"#mgact6-operator-count"
);
const actions =
page.querySelector(
"#mgact6-shortlist-actions"
);
grid.innerHTML =
"";
operatorGrid.innerHTML =
"";
state.experiences
.map(cardById)
.filter(Boolean)
.forEach(
function (card) {
const item =
document.createElement(
"article"
);
item.className =
"mgact6-shortlist-item";
item.innerHTML =
`
${esc(
card.dataset.categoryLabel
)}
${esc(
card.dataset.title
)}
${esc(
card.dataset.feel
)}
Remove
`;
grid.appendChild(
item
);
}
);
state.operators
.map(operatorById)
.filter(Boolean)
.forEach(
function (operator) {
const item =
document.createElement(
"article"
);
item.className =
"mgact6-shortlist-item";
item.innerHTML =
`
BOOKABLE OPTION
${esc(
operator.dataset.name
)}
${esc(
operator.dataset.price
)}
Check availability →
Remove
`;
operatorGrid.appendChild(
item
);
}
);
experienceCount.textContent =
String(
state.experiences.length
);
operatorCount.textContent =
String(
state.operators.length
);
actions.hidden =
(
state.experiences.length +
state.operators.length
) === 0;
}
/* =================================================
PRINT
================================================= */
function printShortlist() {
window.print();
}
/* =================================================
MASTER RENDER
================================================= */
function render() {
renderActiveAnchor();
renderCards();
renderMatch();
renderBooking();
renderDay();
renderShortlist();
}
/* =================================================
EVENTS
================================================= */
page.addEventListener(
"click",
function (event) {
const saveExperience =
event.target.closest(
".mgact6-save"
);
if (saveExperience) {
toggleExperience(
saveExperience.closest(
".mgact6-experience"
)
);
return;
}
const options =
event.target.closest(
".mgact6-options"
);
if (options) {
openBooking(
options.dataset.bookingFor
);
return;
}
const operatorSave =
event.target.closest(
"[data-save-operator]"
);
if (operatorSave) {
toggle(
state.operators,
operatorSave.dataset
.saveOperator
);
save();
render();
return;
}
const openDay =
event.target.closest(
"[data-open-day]"
);
if (openDay) {
const choices =
page.querySelector(
`[data-choices="${openDay.dataset.openDay}"]`
);
choices.hidden =
!choices.hidden;
return;
}
const assign =
event.target.closest(
"[data-assign-part]"
);
if (assign) {
state.day[
assign.dataset.assignPart
] =
assign.dataset.assignExperience;
save();
renderDay();
page.querySelector(
`[data-choices="${assign.dataset.assignPart}"]`
).hidden =
true;
return;
}
const removeExperience =
event.target.closest(
"[data-remove-experience]"
);
if (removeExperience) {
state.experiences =
state.experiences.filter(
function (id) {
return (
id !==
removeExperience.dataset
.removeExperience
);
}
);
save();
render();
return;
}
const removeOperator =
event.target.closest(
"[data-remove-operator]"
);
if (removeOperator) {
state.operators =
state.operators.filter(
function (id) {
return (
id !==
removeOperator.dataset
.removeOperator
);
}
);
save();
render();
}
}
);
/* PRINT */
page.querySelector(
"#mgact6-print"
)
?.addEventListener(
"click",
printShortlist
);
/* CLEAR */
page.querySelector(
"#mgact6-clear"
)
?.addEventListener(
"click",
function () {
state =
defaultState();
save();
render();
}
);
/* HASH UPDATE */
window.addEventListener(
"hashchange",
renderActiveAnchor
);
render();
}
if (
document.readyState ===
"loading"
) {
document.addEventListener(
"DOMContentLoaded",
boot
);
} else {
boot();
}
})();
JUST THE TWO OF YOU
€€€€ · 4–8 HOURS
Charter a Boat
for the Day
Make the Aegean your space for a few hours.
WHY DO IT TOGETHER?
Privacy and uninterrupted time turn
the boat itself into part of the memory.
BEST FOR
Celebrations, honeymoons and couples
wanting one standout day.
♡
This feels like us
See booking options
→
HISTORY + SWIM
€€€ · 5–8 HOURS
Delos First.
Swim Afterwards.
Let the day move from discovery into open water.
WHY DO IT TOGETHER?
You learn something together before
slowing into the rest of the day.
BEST FOR
First-time Mykonos couples.
♡
This feels like us
See booking options
→
GET IN THE WATER
€€ · 2–4 HOURS
Swim, Paddle,
Explore
Pick something where both of you
actually participate.
WHY DO IT TOGETHER?
Shared effort gives the two of you
a better story afterwards.
BEST FOR
Active and playful couples.
♡
This feels like us
See booking options
→
RIDE TOGETHER
€€ · 2–3 HOURS
See the Island
From the Saddle
Let the movement slow the whole day down.
WHY DO IT TOGETHER?
You experience the landscape at the same pace.
BEST FOR
Couples wanting scenery with a little adventure.
♡
This feels like us
See booking options
→
ON FOOT
€€ · 2–4 HOURS
Walk Somewhere
Worth Noticing
Trade speed for detail.
WHY DO IT TOGETHER?
Walking creates room for conversation and discovery.
BEST FOR
Curious couples and slower mornings.
♡
This feels like us
See booking options
→
MOVE A LITTLE MORE
€€ · 2–5 HOURS
Make the Day
a Little More Active
Choose the version that suits your pace.
WHY DO IT TOGETHER?
Doing something unfamiliar makes the day more memorable.
BEST FOR
Couples who dislike sitting still all day.
♡
This feels like us
See booking options
→
MAKE + TASTE
€€ · 3–5 HOURS
Make Dinner
Part of the Story
Replace one restaurant booking with participation.
WHY DO IT TOGETHER?
You both contribute to the experience.
BEST FOR
Food-focused couples.
♡
This feels like us
See booking options
→
SIT + TASTE
€€ · 2–4 HOURS
Taste Something
Slowly
Let the conversation become part of the activity.
WHY DO IT TOGETHER?
You share the flavours and the conversation.
BEST FOR
Wine and food couples.
♡
This feels like us
See booking options
→
EAT THE ISLAND
€€ · 3–5 HOURS
Learn Mykonos
Through Food
Make the meal part of understanding the place.
WHY DO IT TOGETHER?
You discover the destination through something shared.
♡
This feels like us
See booking options
→
STAY AWHILE
€ · OPEN ENDED
Find a Beach
Worth Staying At
Stop treating beaches like checkpoints.
WHY DO IT TOGETHER?
You finally leave nothing else to accomplish.
BEST FOR
Doing almost nothing.
♡
This feels like us
See booking options
→
NO NEXT RESERVATION
€€ · 2–4 HOURS
Let Lunch Become
the Afternoon
Leave the next few hours empty on purpose.
WHY DO IT TOGETHER?
Conversation gets as much room as the meal.
BEST FOR
Food couples and empty afternoons.
♡
This feels like us
See booking options
→
RESET
€€€ · 1–3 HOURS
Give the Trip
a Reset
Let both of you stop moving at the same time.
WHY DO IT TOGETHER?
You reset together instead of taking turns resting.
♡
This feels like us
See booking options
→
MAKE SOMETHING
€€ · 2–4 HOURS
Make the Souvenir
Yourselves
Leave with something connected to the day.
WHY DO IT TOGETHER?
Both of you get to be beginners.
BEST FOR
Creative and curious couples.
♡
This feels like us
See booking options
→
SEE IT DIFFERENTLY
€€ · 1–3 HOURS
Put Both of You
in the Memory
Stop having one of you missing from every photograph.
WHY DO IT TOGETHER?
The memory belongs to both of you.
BEST FOR
Milestones and couples who rarely take photos together.
♡
This feels like us
See booking options
→
SHARE A FIRST
€€ · EXPERIENCE DEPENDENT
Choose One
Shared First
The point is not being good at it.
WHY DO IT TOGETHER?
New experiences are easier to remember than familiar ones.
BEST FOR
Couples wanting one unexpected story.
♡
This feels like us
See booking options
→
WHAT YOU’RE GRAVITATING TOWARD
This is looking like
your kind of Mykonos.
Experience-led and deliberately yours.
EXPERIENCE FIRST · OPERATOR SECOND
Turn the idea
into a plan.
Once you know what you want to experience,
Mango narrows who could actually deliver it.
Save an experience above, then choose
See booking options.
FROM GOOD IDEAS TO ONE GOOD DAY
Build Our Day
Give a few of your saved experiences somewhere
to live without turning the day into a timetable.
01
Morning
Leave it open
Choose from our saves
02
Afternoon
Leave it open
Choose from our saves
03
Sunset
Leave it open
Choose from our saves
04
Night
Leave it open
Choose from our saves
A good Mykonos day can still have empty space.
Print / Save PDF
Clear shortlist
Mango recommends selectively.
Some booking links may earn Mango Getaway commission
or partner revenue at no additional cost to you.
Couple fit comes before commercial placement.