diff --git a/assets/latin-escape-danang.jpg b/assets/latin-escape-danang.jpg new file mode 100644 index 0000000..9947a81 Binary files /dev/null and b/assets/latin-escape-danang.jpg differ diff --git a/assets/xperience.jpg b/assets/xperience.jpg new file mode 100644 index 0000000..60277aa Binary files /dev/null and b/assets/xperience.jpg differ diff --git a/classes.html b/classes.html index f164727..ae646ae 100644 --- a/classes.html +++ b/classes.html @@ -236,7 +236,6 @@
Instagram - Facebook
diff --git a/connect.html b/connect.html index cb9ef7c..887038d 100644 --- a/connect.html +++ b/connect.html @@ -88,13 +88,6 @@ Follow on Instagram - - - - - Join Facebook Group - @@ -162,8 +155,6 @@
Get in touch ↗ - Facebook Group ↗
@@ -180,7 +171,6 @@
Instagram - Facebook
diff --git a/css/style.css b/css/style.css index b035996..6b7d477 100644 --- a/css/style.css +++ b/css/style.css @@ -262,6 +262,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } line-height: 0.87; letter-spacing: -4px; margin-top: 18px; + padding-right: 6px; color: var(--sf-paper); } .sfB-hero h1 .glow { @@ -276,6 +277,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } display: inline-block; transform: rotate(-3deg) translateY(6px); margin: 0 -4px; + padding-right: 6px; } .sfB-hero h1 .vn { display: block; @@ -416,7 +418,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 1px; - color: rgba(255,255,255,0.65); + color: rgba(255,255,255,0.80); text-transform: uppercase; } @@ -513,7 +515,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: 1.5px; - color: rgba(255,246,232,0.4); + color: rgba(255,246,232,0.6); white-space: nowrap; } .sfB-grid3 { @@ -523,10 +525,10 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } } .sfB-pcard { position: relative; - padding: 28px 24px; + padding: 20px 20px; border-radius: 22px; overflow: hidden; - min-height: 280px; + min-height: auto; display: flex; flex-direction: column; justify-content: space-between; @@ -547,7 +549,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } font-weight: 800; font-size: 30px; line-height: 1; - margin-top: 56px; + margin-top: 28px; letter-spacing: -0.8px; } .sfB-pcard h3 em { font-family: 'Caveat Brush', cursive; font-style: normal; font-weight: 400; } @@ -778,7 +780,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } } .sfB-page-head .info { font-size: 13px; - color: rgba(255,246,232,0.65); + color: rgba(255,246,232,0.80); line-height: 1.55; padding: 16px 18px; border-radius: 14px; @@ -814,7 +816,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; - color: rgba(255,246,232,0.65); + color: rgba(255,246,232,0.80); transition: all .18s; border: 0; cursor: pointer; @@ -835,7 +837,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } } .sfB-row { display: grid; - grid-template-columns: 120px 1fr 1.5fr 1fr 110px 90px; + grid-template-columns: 130px 75px 1fr 1fr 1fr 95px; align-items: center; gap: 14px; padding: 18px 22px; @@ -855,6 +857,16 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } border-color: rgba(242,107,107,0.45); } .sfB-row .col-day { display: flex; flex-direction: column; gap: 4px; } +.sfB-row .col-day .day-line { display: flex; align-items: baseline; gap: 7px; } +.sfB-row .col-day .date-num { + font-family: 'JetBrains Mono', monospace; + font-size: 15px; + font-weight: 500; + color: var(--sf-gold); + opacity: 0.65; + letter-spacing: -0.5px; + flex-shrink: 0; +} .sfB-row .col-day .name { font-family: 'Caveat Brush', cursive; font-size: 24px; @@ -871,6 +883,13 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } color: rgba(255,246,232,0.45); text-transform: uppercase; } +.sfB-row .col-when { + font-family: 'JetBrains Mono', monospace; + font-size: 11px; + letter-spacing: 0.5px; + color: rgba(255,246,232,0.5); + text-transform: uppercase; +} .sfB-row .col-venue { font-family: 'Bricolage Grotesque', sans-serif; font-weight: 800; @@ -899,7 +918,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } font-family: 'JetBrains Mono', monospace; font-size: 9px; letter-spacing: 0.5px; - color: rgba(255,246,232,0.4); + color: rgba(255,246,232,0.6); margin-top: 4px; text-transform: uppercase; } @@ -934,7 +953,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } .sfB-page .footnote { margin-top: 20px; font-size: 11px; - color: rgba(255,246,232,0.4); + color: rgba(255,246,232,0.6); letter-spacing: 0.5px; } @@ -1200,7 +1219,7 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } color: transparent; margin-bottom: 4px; } -.sfB-connect-hero p { font-size: 13px; color: rgba(255,246,232,0.65); margin-top: 8px; line-height: 1.5; } +.sfB-connect-hero p { font-size: 13px; color: rgba(255,246,232,0.80); margin-top: 8px; line-height: 1.5; } .sfB-connect-hero .ch-right { display: flex; flex-direction: column; gap: 10px; } .sfB-igrid { @@ -1308,8 +1327,8 @@ body > *:not(.sfB-bg) { position: relative; z-index: 1; } .sfB-pillars { padding: 40px 20px 20px; } .sfB-pillars .head h2 { font-size: 38px; } .sfB-grid3 { grid-template-columns: 1fr; } - .sfB-pcard { min-height: 200px; } - .sfB-pcard h3 { font-size: 26px; margin-top: 40px; } + .sfB-pcard { min-height: auto; } + .sfB-pcard h3 { font-size: 26px; margin-top: 24px; } .sfB-coming { padding: 20px 20px 40px; } .sfB-coming .head h2 { font-size: 38px; } diff --git a/festivals.html b/festivals.html index 7e54b24..ef64909 100644 --- a/festivals.html +++ b/festivals.html @@ -70,13 +70,12 @@
-
+
Festival · 2026
Latin Escape
May 15 – 17, 2026
-
LE
@@ -138,13 +137,12 @@
-
+
Festival · 2026
Vietnam Latin Xperience
October 2 – 4, 2026
-
VLX
@@ -193,7 +191,8 @@ Facebook - +
-
Sabor Flow Da Nang — Latin dance community © 2025
+
Sabor Flow Da Nang — Latin dance community © 2025 +
diff --git a/index.html b/index.html index c70c9ba..581431b 100644 --- a/index.html +++ b/index.html @@ -121,18 +121,15 @@ @@ -264,7 +254,6 @@ diff --git a/js/main.js b/js/main.js index 53656a9..bb7acdb 100644 --- a/js/main.js +++ b/js/main.js @@ -4,19 +4,19 @@ // ============================================================ const SCHEDULE = [ - { day: 'Monday', when: '8:30 pm', venue: 'Webe Coffee', social: 'BOM', music: '8 Bachata · 1 Salsa · 1 Kizomba', city: 'Da Nang', organizer: 'Luu Phuong & Shai', mapUrl: 'https://maps.app.goo.gl/jvaQgcNt4doYwZ2N7' }, - { day: 'Tuesday', when: '9 pm', venue: 'La Riva', social: 'Latino Dancing', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Hoi An', organizer: 'David Tavares', mapUrl: 'https://www.google.com/maps/search/?api=1&query=La+Riva+An+Bang+Hoi+An+Vietnam' }, - { day: 'Tuesday', when: '9 pm', venue: 'Caliz Bar', social: 'Sensual Night', music: '3 Bachata · 2 Salsa · 2 Kizomba', city: 'Da Nang', organizer: 'Daisy Nguyen', mapUrl: 'https://www.google.com/maps/place/C%C3%A1liz+Wine+Bar/@16.0485026,108.2470699,17z' }, - { day: 'Wednesday', when: '7:30 pm', venue: 'Ket Fai Bar', social: 'Bachata Kiz Night', music: 'Kizomba 7:30 · Bachata 9 pm', city: 'Da Nang', organizer: 'Sean Kim', mapUrl: 'https://www.google.com/maps/search/?api=1&query=Ket+Fai+Bar+Da+Nang+Vietnam' }, - { day: 'Thursday', when: '9 pm', venue: 'Malibu', social: 'Salsa Nights', music: '2 Salsa · 2 Bachata', city: 'Da Nang', organizer: 'Lucho Giraldes', mapUrl: 'https://www.google.com/maps/search/?api=1&query=Malibu+Beach+Club+Da+Nang+Vietnam' }, - { day: 'Friday', when: '9 pm', venue: 'An Thuong By Night', social: 'Dance Unity Party', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Da Nang', organizer: 'Nadiya Yagfarova', mapUrl: 'https://www.google.com/maps/search/?api=1&query=An+Thuong+Tourist+Street+Da+Nang+Vietnam' }, - { day: 'Saturday', when: '9 pm', venue: 'La Riva', social: 'Latino Dancing', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Hoi An', organizer: 'David Tavares', mapUrl: 'https://www.google.com/maps/search/?api=1&query=La+Riva+An+Bang+Hoi+An+Vietnam' }, - { day: 'Saturday', when: '9 pm', venue: 'An Thuong By Night', social: 'Bachata Party', music: 'Only Bachata', city: 'Da Nang', organizer: 'Vaclav & Kseniya', mapUrl: 'https://www.google.com/maps/search/?api=1&query=An+Thuong+Tourist+Street+Da+Nang+Vietnam' }, - { day: 'Sunday', when: '9 pm', venue: 'Last Call', social: 'Latin Dance Social', music: '3 Bachata · 2 Salsa', city: 'Da Nang', organizer: 'Vaclav & Kseniya', mapUrl: 'https://www.google.com/maps/search/?api=1&query=Last+Call+Bar+Da+Nang+Vietnam' }, - { day: 'Sunday', when: '9 pm', venue: 'Corner Bar', social: 'Sunday Latin', music: '3 Bachata · 2 Salsa · 3 Kizomba', city: 'Da Nang', organizer: 'Daisy Nguyen', mapUrl: 'https://www.google.com/maps/search/?api=1&query=Corner+Bar+Da+Nang+Vietnam' }, + { day: 'Monday', when: '8:30 pm', venue: 'Webe Coffee', social: 'BOM', music: '8 Bachata · 1 Salsa · 1 Kizomba', city: 'Da Nang', organizer: 'Luu Phuong & Shai', mapUrl: 'https://maps.app.goo.gl/sznmGXHmiiaWf1ke6' }, + { day: 'Tuesday', when: '9 pm', venue: 'La Riva', social: 'Latino Dancing', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Hoi An', organizer: 'David Tavares', mapUrl: 'https://maps.app.goo.gl/3ZyB8icd8oswRghE7' }, + { day: 'Tuesday', when: '9 pm', venue: 'Caliz Bar', social: 'Sensual Night', music: '3 Bachata · 2 Salsa · 2 Kizomba', city: 'Da Nang', organizer: 'Daisy Nguyen', mapUrl: 'https://maps.app.goo.gl/YagFKw2gcTJp9PJc7' }, + { day: 'Wednesday', when: '7:30 pm', venue: 'Ket Fai Bar', social: 'Bachata Kiz Night', music: 'Kizomba 7:30 · Bachata 9 pm', city: 'Da Nang', organizer: 'Sean Kim', mapUrl: 'https://maps.app.goo.gl/XYxY4UCnnJjCAomK6' }, + { day: 'Thursday', when: '9 pm', venue: 'Malibu', social: 'Salsa Nights', music: '2 Salsa · 2 Bachata', city: 'Da Nang', organizer: 'Lucho Giraldes', mapUrl: 'https://maps.app.goo.gl/hZttmc9UcymnKfWP8' }, + { day: 'Friday', when: '9 pm', venue: 'An Thuong By Night', social: 'Dance Unity Party', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Da Nang', organizer: 'Nadiya Yagfarova', mapUrl: 'https://maps.app.goo.gl/9cHcJcDgan9ntowt9' }, + { day: 'Saturday', when: '9 pm', venue: 'La Riva', social: 'Latino Dancing', music: '2 Salsa · 2 Bachata · 2 Kizomba', city: 'Hoi An', organizer: 'David Tavares', mapUrl: 'https://maps.app.goo.gl/3ZyB8icd8oswRghE7' }, + { day: 'Saturday', when: '9 pm', venue: 'An Thuong By Night', social: 'Bachata Party', music: 'Only Bachata', city: 'Da Nang', organizer: 'Vaclav & Kseniya', mapUrl: 'https://maps.app.goo.gl/9cHcJcDgan9ntowt9' }, + { day: 'Sunday', when: '9 pm', venue: 'Last Call', social: 'Latin Dance Social', music: '3 Bachata · 2 Salsa', city: 'Da Nang', organizer: 'Vaclav & Kseniya', mapUrl: 'https://maps.app.goo.gl/1tEE4itDEeErhEmG6' }, + { day: 'Sunday', when: '9 pm', venue: 'Corner Bar', social: 'Sunday Latin', music: '3 Bachata · 2 Salsa · 3 Kizomba', city: 'Da Nang', organizer: 'Daisy Nguyen', mapUrl: 'https://maps.app.goo.gl/QyuWvCg2DZoFiRyd6' }, ]; -const DAYS_ORDER = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; +const DAYS_ORDER = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; function getTodayName() { return DAYS_ORDER[new Date().getDay()]; @@ -38,7 +38,7 @@ function musicToChips(music) { function initNav() { const hamburger = document.getElementById('sfB-hamburger'); const mobileNav = document.getElementById('sfB-mobile-nav'); - const closeBtn = document.getElementById('sfB-mobile-nav-close'); + const closeBtn = document.getElementById('sfB-mobile-nav-close'); if (!hamburger || !mobileNav) return; @@ -60,10 +60,25 @@ function renderScheduleList() { const list = document.getElementById('sfB-schedule-list'); if (!list) return; - const today = getTodayName(); + const now = new Date(); + const todayName = DAYS_ORDER[now.getDay()]; + const startIdx = DAYS_ORDER.indexOf(todayName); + + // Map each day name to how many days from today it is (0–6) + const dayOffset = {}; + DAYS_ORDER.forEach(name => { + dayOffset[name] = (DAYS_ORDER.indexOf(name) - startIdx + 7) % 7; + }); + + const sorted = [...SCHEDULE].sort((a, b) => dayOffset[a.day] - dayOffset[b.day]); + + list.innerHTML = sorted.map(row => { + const isToday = row.day === todayName; + const offset = dayOffset[row.day]; + const date = new Date(now); + date.setDate(now.getDate() + offset); + const dayNum = `${date.getDate()}/${date.getMonth() + 1}`; - list.innerHTML = SCHEDULE.map(row => { - const isToday = row.day === today; const cityClass = row.city === 'Hoi An' ? 'hoian' : 'danang'; const venueEl = row.mapUrl ? `${row.venue}` @@ -72,21 +87,23 @@ function renderScheduleList() { return `
- ${row.day} - ${row.when || ''} +
+ ${dayNum} + ${row.day} +
${isToday ? '▶ Tonight' : ''}
-
- 📍 - ${venueEl} -
+
${row.when || ''}
${musicToChips(row.music)}
+
+ 📍 + ${venueEl} +
${row.city}
-
${row.organizer}
`; }).join(''); } diff --git a/schedule.html b/schedule.html index e772c2b..1f2c599 100644 --- a/schedule.html +++ b/schedule.html @@ -65,8 +65,7 @@
Music ratios (e.g. 2 Salsa · 2 Bachata · 2 Kizomba) show approximate songs per style per rotation. Schedules may change — follow @saborflowdanang and the Da Nang SBK group for real-time updates. Pop-up parties for Zouk and + rel="noopener">@saborflowdanang for real-time updates. Pop-up parties for Zouk and Tango are announced there too.
@@ -85,8 +84,7 @@
-

Schedule updated monthly — last update: May - 2026

+

Schedule updated monthly — last update: