Spaces:
No application file
No application file
commit
Browse files- .gitattributes +8 -0
- README.txt +15 -0
- assets/css/styles.css +132 -0
- assets/images/beignets_crevettes.png +3 -0
- assets/images/burger.webp +3 -0
- assets/images/menu_board.png +3 -0
- assets/images/noodles.webp +3 -0
- assets/images/sabaidi_logo.webp +3 -0
- assets/images/sabaidi_sign.webp +3 -0
- assets/images/samoussas.png +3 -0
- assets/images/spring_rolls.webp +3 -0
- assets/js/app.js +113 -0
- assets/js/i18n.js +250 -0
- commander.html +76 -0
- contact.html +56 -0
- evenements.html +73 -0
- fidelite.html +72 -0
- gallery.html +62 -0
- index.html +197 -0
- menu.html +87 -0
- reserver.html +76 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,11 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
assets/images/beignets_crevettes.png filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/images/burger.webp filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
assets/images/menu_board.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
assets/images/noodles.webp filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
assets/images/sabaidi_logo.webp filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
assets/images/sabaidi_sign.webp filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
assets/images/samoussas.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
assets/images/spring_rolls.webp filter=lfs diff=lfs merge=lfs -text
|
README.txt
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
Sabaidi — Site multilingue (FR/ES/EN)
|
| 3 |
+
------------------------------------
|
| 4 |
+
• Changement de langue via les boutons FR/ES/EN (persistant).
|
| 5 |
+
• Carte dynamique depuis assets/js/i18n.js (sections starters/mains).
|
| 6 |
+
• Couleurs, fond, et présentation inspirés des images fournies.
|
| 7 |
+
• Images originales placées dans assets/images/ (incluant la photo de la carte).
|
| 8 |
+
|
| 9 |
+
Fichiers principaux :
|
| 10 |
+
- index.html (accueil + hero)
|
| 11 |
+
- menu.html (la carte)
|
| 12 |
+
- gallery.html (galerie d'images)
|
| 13 |
+
- contact.html (coordonnées)
|
| 14 |
+
- assets/css/styles.css (thème)
|
| 15 |
+
- assets/js/i18n.js (traductions + données de la carte)
|
assets/css/styles.css
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
:root{
|
| 3 |
+
--primary:#F5C542;
|
| 4 |
+
--deep-teal:#0E4F4E;
|
| 5 |
+
--ocean:#0B6C6A;
|
| 6 |
+
--sand:#F4E9D8;
|
| 7 |
+
--ink:#1B1B1B;
|
| 8 |
+
--card-bg: rgba(255,255,255,0.08);
|
| 9 |
+
}
|
| 10 |
+
*{box-sizing:border-box}
|
| 11 |
+
html,body{margin:0;padding:0;background: linear-gradient(180deg, var(--ocean), var(--deep-teal)); color: #FFFFFF; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;}
|
| 12 |
+
a{color:var(--primary);text-decoration:none}
|
| 13 |
+
.container{width: min(1100px, 92%); margin: 0 auto;}
|
| 14 |
+
header.nav{position:sticky;top:0;z-index:50; backdrop-filter: blur(10px); background: rgba(14,79,78,0.85); border-bottom:1px solid rgba(245,197,66,0.25);}
|
| 15 |
+
header.nav .wrap{display:flex; align-items:center; justify-content:space-between; padding:10px 0;}
|
| 16 |
+
.brand{display:flex; align-items:center; gap:12px;}
|
| 17 |
+
.brand img.logo{height:42px; width:auto; border-radius:10px; box-shadow: 0 6px 20px rgba(0,0,0,.25);}
|
| 18 |
+
.brand .title{font-size:1.3rem; letter-spacing:.5px; font-weight:700; color:var(--primary);}
|
| 19 |
+
nav a{margin:0 10px; font-weight:600; opacity:.95}
|
| 20 |
+
.lang-switch button{margin-left:8px;border:1px solid rgba(255,255,255,.2); background:transparent; color:#fff; padding:6px 10px; border-radius:10px; cursor:pointer}
|
| 21 |
+
.lang-switch button.active{border-color:var(--primary); color:var(--primary);}
|
| 22 |
+
|
| 23 |
+
.hero{position:relative; padding:60px 0 40px; background: radial-gradient(1200px 600px at 60% -10%, rgba(255,255,255,.12), transparent 60%);}
|
| 24 |
+
.hero .content{display:grid; grid-template-columns: 1.1fr .9fr; gap:28px; align-items:center;}
|
| 25 |
+
.hero h1{font-weight:900; font-size: clamp(2rem, 4vw, 3.2rem); margin:0; color:var(--primary); text-shadow:0 2px 0 rgba(0,0,0,.2);}
|
| 26 |
+
.tagline{font-size:1.05rem; opacity:.95; line-height:1.5}
|
| 27 |
+
.cta{display:inline-block; margin-top:18px; background:var(--primary); color:#2a2307; padding:12px 18px; border-radius:12px; font-weight:800; box-shadow:0 8px 25px rgba(245,197,66,.35);}
|
| 28 |
+
.hero .art img{width:100%; border-radius:18px; box-shadow: 0 12px 50px rgba(0,0,0,.35);}
|
| 29 |
+
|
| 30 |
+
.section{padding:36px 0;}
|
| 31 |
+
.section h2{color:var(--primary); margin:0 0 12px 0; font-size:1.8rem}
|
| 32 |
+
.grid{display:grid; gap:18px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));}
|
| 33 |
+
.card{background:var(--card-bg); border:1px solid rgba(255,255,255,.12); border-radius:18px; overflow:hidden; box-shadow:0 10px 30px rgba(0,0,0,.25);}
|
| 34 |
+
.card img{display:block;width:100%; height:180px; object-fit:cover}
|
| 35 |
+
.card .pad{padding:14px}
|
| 36 |
+
.card .title{font-weight:800; letter-spacing:.3px; font-size:1.05rem}
|
| 37 |
+
.card .row{display:flex; align-items:center; justify-content:space-between; margin-top:6px}
|
| 38 |
+
.badge{background:rgba(245,197,66,.1); color:var(--primary); padding:4px 8px; border-radius:999px; font-size:.85rem; border:1px solid rgba(245,197,66,.35);}
|
| 39 |
+
|
| 40 |
+
footer{padding:30px 0; border-top:1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.15);}
|
| 41 |
+
footer .small{opacity:.8; font-size:.92rem}
|
| 42 |
+
|
| 43 |
+
.note{opacity:.85; font-size:.92rem}
|
| 44 |
+
.gallery img{height:210px}
|
| 45 |
+
|
| 46 |
+
@media (max-width: 850px){
|
| 47 |
+
.hero .content{grid-template-columns: 1fr; }
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/* --- Typography upgrade to match Sabaidi poster --- */
|
| 51 |
+
body{font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;}
|
| 52 |
+
h1,h2,h3,h4,.title{font-family:"Montserrat", "Inter", Arial, sans-serif;}
|
| 53 |
+
.brand .title{font-family:"Pacifico","Montserrat",cursive; font-weight:400; font-size:1.7rem; letter-spacing:.5px;}
|
| 54 |
+
|
| 55 |
+
/* Gold text effect for brand and key headings */
|
| 56 |
+
.brand .title, .gold {
|
| 57 |
+
background: linear-gradient(180deg,#FFD76A 0%, #F5C542 40%, #D79C12 100%);
|
| 58 |
+
-webkit-background-clip: text; background-clip:text; color: transparent;
|
| 59 |
+
text-shadow: 0 2px 0 rgba(0,0,0,.25);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
.hero{ padding:70px 0 40px; }
|
| 63 |
+
.hero .content h1{ font-family:"Montserrat", "Inter", sans-serif; font-weight:900; }
|
| 64 |
+
.hero .content .tagline{ font-family:"Inter", sans-serif; }
|
| 65 |
+
nav a{font-family:"Montserrat","Inter",sans-serif; letter-spacing:.2px}
|
| 66 |
+
.lang-switch button{font-family:"Montserrat","Inter",sans-serif}
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
/* --- Carousel & Animations --- */
|
| 70 |
+
.hero-carousel{position:relative; overflow:hidden; border-radius:18px; box-shadow: 0 12px 50px rgba(0,0,0,.35);}
|
| 71 |
+
.hero-carousel img{width:100%; height:420px; object-fit:cover; display:block; opacity:0; transition: opacity 900ms ease-in-out;}
|
| 72 |
+
.hero-carousel img.active{opacity:1}
|
| 73 |
+
.hero .content{grid-template-columns: 1fr 1.15fr}
|
| 74 |
+
|
| 75 |
+
/* --- Forms --- */
|
| 76 |
+
.form{background: var(--card-bg); border:1px solid rgba(255,255,255,.12); border-radius:18px; padding:16px; box-shadow:0 10px 30px rgba(0,0,0,.25);}
|
| 77 |
+
.input-row{display:grid; grid-template-columns: repeat(auto-fit, minmax(220px,1fr)); gap:12px; margin-bottom:10px}
|
| 78 |
+
label{font-size:.92rem; opacity:.9; display:block; margin-bottom:4px}
|
| 79 |
+
input,select,textarea{width:100%; padding:10px 12px; border-radius:12px; border:1px solid rgba(255,255,255,.25); background: rgba(255,255,255,.06); color:#fff}
|
| 80 |
+
textarea{min-height:90px}
|
| 81 |
+
.btn{display:inline-block; padding:10px 14px; border-radius:12px; background:var(--primary); color:#2a2307; font-weight:800; border:0; cursor:pointer; box-shadow:0 8px 25px rgba(245,197,66,.35)}
|
| 82 |
+
.btn.secondary{background:transparent; color:#fff; border:1px solid rgba(255,255,255,.35)}
|
| 83 |
+
.alert{margin-top:10px; padding:10px 12px; border-radius:12px; background:rgba(12,115,85,.25); border:1px solid rgba(255,255,255,.2)}
|
| 84 |
+
.alert.error{background:rgba(150,12,12,.25)}
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
/* Mobile fine-tuning */
|
| 88 |
+
@media (max-width: 540px){
|
| 89 |
+
header.nav .wrap{padding:8px 0}
|
| 90 |
+
nav a{margin:0 6px; font-size:.95rem}
|
| 91 |
+
.hero .content{gap:16px}
|
| 92 |
+
.hero-carousel img{height:260px}
|
| 93 |
+
.card img{height:160px}
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
/* --- Centered hero carousel with overlay text --- */
|
| 98 |
+
.hero { padding: 30px 0 20px; }
|
| 99 |
+
.hero .content { display:block; }
|
| 100 |
+
.hero-carousel { position: relative; max-width: 1100px; margin: 0 auto; border-radius: 22px; overflow: hidden; }
|
| 101 |
+
.hero-carousel img { height: 520px; }
|
| 102 |
+
.carousel-overlay {
|
| 103 |
+
position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center;
|
| 104 |
+
text-align:center; padding: 20px;
|
| 105 |
+
background: linear-gradient(180deg, rgba(0,0,0,.25) 0%, rgba(0,0,0,.15) 30%, rgba(0,0,0,.25) 100%);
|
| 106 |
+
}
|
| 107 |
+
.carousel-overlay h1 { font-size: clamp(2.2rem, 6vw, 4rem); margin:0 0 6px 0; line-height:1.05; }
|
| 108 |
+
.carousel-overlay p { max-width: 820px; margin: 8px auto 12px; font-size: clamp(1rem, 2.2vw, 1.25rem); }
|
| 109 |
+
.carousel-overlay .cta { margin-top: 10px; }
|
| 110 |
+
|
| 111 |
+
@media (max-width: 900px){
|
| 112 |
+
.hero-carousel img { height: 380px; }
|
| 113 |
+
}
|
| 114 |
+
@media (max-width: 560px){
|
| 115 |
+
.hero-carousel img { height: 260px; }
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
/* --- v7: absolute slides + theme toggle --- */
|
| 120 |
+
.hero-carousel{position:relative}
|
| 121 |
+
.hero-carousel img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}
|
| 122 |
+
.theme-switch button{margin-left:8px;border:1px solid rgba(255,255,255,.2); background:transparent; color:#fff; padding:6px 10px; border-radius:10px; cursor:pointer}
|
| 123 |
+
.theme-light .theme-switch button{color:#0b3d3d; border-color: rgba(0,0,0,.2)}
|
| 124 |
+
|
| 125 |
+
/* Light theme overrides */
|
| 126 |
+
.theme-light body{background: linear-gradient(180deg, #E9FAFF, #FFF7E4); color:#0b3d3d}
|
| 127 |
+
.theme-light .card{background: rgba(0,0,0,0.04); border-color: rgba(0,0,0,.12)}
|
| 128 |
+
.theme-light header.nav{background: rgba(255,255,255,.7); border-bottom-color: rgba(0,0,0,.1)}
|
| 129 |
+
.theme-light nav a{color:#0b3d3d}
|
| 130 |
+
.theme-light .note{opacity:.9}
|
| 131 |
+
.theme-light .badge{background: rgba(215,156,18,.08); color:#a06b00; border-color: rgba(215,156,18,.35)}
|
| 132 |
+
.theme-light footer{background: rgba(0,0,0,.05); border-top-color: rgba(0,0,0,.1)}
|
assets/images/beignets_crevettes.png
ADDED
|
Git LFS Details
|
assets/images/burger.webp
ADDED
|
Git LFS Details
|
assets/images/menu_board.png
ADDED
|
Git LFS Details
|
assets/images/noodles.webp
ADDED
|
Git LFS Details
|
assets/images/sabaidi_logo.webp
ADDED
|
Git LFS Details
|
assets/images/sabaidi_sign.webp
ADDED
|
Git LFS Details
|
assets/images/samoussas.png
ADDED
|
Git LFS Details
|
assets/images/spring_rolls.webp
ADDED
|
Git LFS Details
|
assets/js/app.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
// Config
|
| 3 |
+
const BOOKING_EMAIL = 'book@sabaidi.example'; // change to your inbox
|
| 4 |
+
const WEBHOOK_URL = null; // set to an https endpoint to receive JSON payloads (optional)
|
| 5 |
+
const THEME_KEY = 'sabaidi_theme';
|
| 6 |
+
const WHATSAPP_PHONE = '18090000000'; // commander
|
| 7 |
+
|
| 8 |
+
function q(sel,root=document){return root.querySelector(sel)}
|
| 9 |
+
function qa(sel,root=document){return Array.from(root.querySelectorAll(sel))}
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
// Theme
|
| 13 |
+
function setTheme(theme){
|
| 14 |
+
const root = document.documentElement;
|
| 15 |
+
const isLight = theme === 'light';
|
| 16 |
+
root.classList.toggle('theme-light', isLight);
|
| 17 |
+
localStorage.setItem(THEME_KEY, theme);
|
| 18 |
+
const btn = document.getElementById('themeToggle');
|
| 19 |
+
if(btn) btn.textContent = isLight ? '🌞' : '🌙';
|
| 20 |
+
}
|
| 21 |
+
function getTheme(){
|
| 22 |
+
return localStorage.getItem(THEME_KEY) || (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
// Carousel (supports multiple instances)
|
| 26 |
+
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
// Reservation form: send via mailto + optional webhook
|
| 30 |
+
async function submitReservation(form, ok, err){
|
| 31 |
+
const lang = getLanguage();
|
| 32 |
+
const t = window.SABAIDI_I18N[lang];
|
| 33 |
+
const data = {
|
| 34 |
+
name: form.name.value.trim(),
|
| 35 |
+
phone: form.phone.value.trim(),
|
| 36 |
+
email: form.email.value.trim(),
|
| 37 |
+
people: form.people.value,
|
| 38 |
+
date: form.date.value,
|
| 39 |
+
time: form.time.value,
|
| 40 |
+
notes: form.notes.value.trim()
|
| 41 |
+
};
|
| 42 |
+
if(!data.name || !data.phone || !data.people || !data.date || !data.time){
|
| 43 |
+
err.style.display='block'; return;
|
| 44 |
+
}
|
| 45 |
+
// mailto
|
| 46 |
+
const subject = encodeURIComponent(t.reserve_email_subject + ' • ' + data.date + ' ' + data.time + ' • ' + data.people + 'p');
|
| 47 |
+
const body = encodeURIComponent(
|
| 48 |
+
`Nom: ${data.name}\nTéléphone: ${data.phone}\nEmail: ${data.email}\nCouverts: ${data.people}\nDate: ${data.date}\nHeure: ${data.time}\nNotes: ${data.notes}`
|
| 49 |
+
);
|
| 50 |
+
const mailtoUrl = `mailto:${BOOKING_EMAIL}?subject=${subject}&body=${body}`;
|
| 51 |
+
window.open(mailtoUrl, '_blank');
|
| 52 |
+
|
| 53 |
+
// optional webhook
|
| 54 |
+
if(WEBHOOK_URL){
|
| 55 |
+
try{
|
| 56 |
+
await fetch(WEBHOOK_URL, {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({type:'reservation', lang, ...data})});
|
| 57 |
+
}catch(e){ /* ignore network errors for static site */ }
|
| 58 |
+
}
|
| 59 |
+
ok.style.display='block'; form.reset();
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
// Init reservation form
|
| 63 |
+
function initReserveForm(){
|
| 64 |
+
const form = q('#reserveForm');
|
| 65 |
+
if(!form) return;
|
| 66 |
+
const ok = q('#reserveOk'), err = q('#reserveErr');
|
| 67 |
+
form.addEventListener('submit', (e)=>{
|
| 68 |
+
e.preventDefault(); err.style.display='none'; ok.style.display='none';
|
| 69 |
+
submitReservation(form, ok, err);
|
| 70 |
+
});
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
// WhatsApp prefill (Commander)
|
| 74 |
+
function initWhatsApp(){
|
| 75 |
+
const form = q('#orderForm');
|
| 76 |
+
if(!form) return;
|
| 77 |
+
const btn = q('#waBtn');
|
| 78 |
+
const lang = getLanguage();
|
| 79 |
+
const t = window.SABAIDI_I18N[lang];
|
| 80 |
+
btn.addEventListener('click', ()=>{
|
| 81 |
+
const name = form.name.value.trim() || '—';
|
| 82 |
+
const time = form.time.value.trim() || '—';
|
| 83 |
+
const order = form.order.value.trim() || '—';
|
| 84 |
+
let msg = t.wa_template_order.replace('{order}', order).replace('{time}', time).replace('{name}', name);
|
| 85 |
+
const url = 'https://wa.me/' + WHATSAPP_PHONE + '?text=' + encodeURIComponent(msg);
|
| 86 |
+
window.open(url, '_blank');
|
| 87 |
+
});
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
document.addEventListener('DOMContentLoaded', function(){ setTheme(getTheme());
|
| 91 |
+
startHeroCarousels();
|
| 92 |
+
initReserveForm();
|
| 93 |
+
initWhatsApp();
|
| 94 |
+
});
|
| 95 |
+
|
| 96 |
+
function startHeroCarousels(){
|
| 97 |
+
document.querySelectorAll('.hero-carousel').forEach((wrap)=>{
|
| 98 |
+
const slides = Array.from(wrap.querySelectorAll('img'));
|
| 99 |
+
if(!slides.length) return;
|
| 100 |
+
let i = 0;
|
| 101 |
+
const show = (idx)=> slides.forEach((img, k)=> img.classList.toggle('active', k === idx));
|
| 102 |
+
function fit(){
|
| 103 |
+
const img = slides[i];
|
| 104 |
+
let ratio = (img.naturalWidth && img.naturalHeight) ? img.naturalHeight / img.naturalWidth : (9/16);
|
| 105 |
+
const h = Math.max(260, Math.min(640, Math.round(wrap.clientWidth * ratio)));
|
| 106 |
+
wrap.style.height = h + 'px';
|
| 107 |
+
}
|
| 108 |
+
slides.forEach(img => img.addEventListener('load', fit, {once:false}));
|
| 109 |
+
show(0); setTimeout(fit, 50);
|
| 110 |
+
window.addEventListener('resize', fit);
|
| 111 |
+
setInterval(()=>{ i = (i+1) % slides.length; show(i); fit(); }, 3000);
|
| 112 |
+
});
|
| 113 |
+
}
|
assets/js/i18n.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
window.SABAIDI_I18N = {
|
| 2 |
+
"fr": {
|
| 3 |
+
"nav_home": "Accueil",
|
| 4 |
+
"nav_menu": "La Carte",
|
| 5 |
+
"nav_gallery": "Galerie",
|
| 6 |
+
"nav_contact": "Contact",
|
| 7 |
+
"hero_title": "Sabaidi — Restaurant & Bar",
|
| 8 |
+
"hero_subtitle": "Cuisine d'inspiration asiatique, cocktails au bord de la piscine, et bonne humeur sur la plage de Las Terrenas.",
|
| 9 |
+
"hero_cta": "Voir la carte",
|
| 10 |
+
"home_section_title": "Goûtez nos classiques",
|
| 11 |
+
"home_section_sub": "Sélection de plats populaires",
|
| 12 |
+
"menu_title": "Notre carte",
|
| 13 |
+
"menu_starters": "Entrées",
|
| 14 |
+
"menu_mains": "Plats",
|
| 15 |
+
"menu_note": "Prix en RDS. Options avec œuf pour les plats 'loc lac' (+60 RDS).",
|
| 16 |
+
"footer": "Aligio Apart‑Hotel & Spa • Las Terrenas • République Dominicaine",
|
| 17 |
+
"nav_reserve": "Réserver",
|
| 18 |
+
"nav_order": "Commander",
|
| 19 |
+
"nav_events": "Événements",
|
| 20 |
+
"nav_loyalty": "Fidélité",
|
| 21 |
+
"events_title": "Événements & Mariages",
|
| 22 |
+
"events_sub": "Organisez vos moments spéciaux dans un cadre idyllique, cuisine asiatique raffinée.",
|
| 23 |
+
"reserve_title": "Réserver une table",
|
| 24 |
+
"order_title": "Commander",
|
| 25 |
+
"loyalty_title": "Carte de fidélité",
|
| 26 |
+
"reserve_intro": "Réservez votre table en quelques secondes.",
|
| 27 |
+
"form_name": "Nom",
|
| 28 |
+
"form_phone": "Téléphone",
|
| 29 |
+
"form_email": "Email",
|
| 30 |
+
"form_date": "Date",
|
| 31 |
+
"form_time": "Heure",
|
| 32 |
+
"form_people": "Couverts",
|
| 33 |
+
"form_notes": "Notes (allergies, préférences...)",
|
| 34 |
+
"form_submit": "Réserver",
|
| 35 |
+
"form_success": "Merci ! Votre demande a été prise en compte. Nous vous confirmons rapidement.",
|
| 36 |
+
"form_error_validation": "Merci de remplir les champs requis.",
|
| 37 |
+
"order_intro": "Passez commande et récupérez sur place.",
|
| 38 |
+
"order_call": "Commander par téléphone",
|
| 39 |
+
"order_whatsapp": "Envoyer sur WhatsApp",
|
| 40 |
+
"order_hours_title": "Horaires",
|
| 41 |
+
"order_hours_value": "Tous les jours 12:00 – 22:30",
|
| 42 |
+
"wa_template_order": "Bonjour, je souhaite passer commande: {order}. Retrait {time}. Nom: {name}. Merci !",
|
| 43 |
+
"reserve_email_subject": "Réservation – Sabaidi"
|
| 44 |
+
},
|
| 45 |
+
"es": {
|
| 46 |
+
"nav_home": "Inicio",
|
| 47 |
+
"nav_menu": "Carta",
|
| 48 |
+
"nav_gallery": "Galería",
|
| 49 |
+
"nav_contact": "Contacto",
|
| 50 |
+
"hero_title": "Sabaidi — Restaurante & Bar",
|
| 51 |
+
"hero_subtitle": "Cocina de inspiración asiática, cócteles junto a la piscina y buena vibra en la playa de Las Terrenas.",
|
| 52 |
+
"hero_cta": "Ver la carta",
|
| 53 |
+
"home_section_title": "Prueba nuestros clásicos",
|
| 54 |
+
"home_section_sub": "Selección de platos populares",
|
| 55 |
+
"menu_title": "Nuestra carta",
|
| 56 |
+
"menu_starters": "Entradas",
|
| 57 |
+
"menu_mains": "Platos fuertes",
|
| 58 |
+
"menu_note": "Precios en RDS. Opción con huevo para los 'loc lac' (+60 RDS).",
|
| 59 |
+
"footer": "Aligio Apart‑Hotel & Spa • Las Terrenas • República Dominicana",
|
| 60 |
+
"nav_reserve": "Reservar",
|
| 61 |
+
"nav_order": "Pedir",
|
| 62 |
+
"nav_events": "Eventos",
|
| 63 |
+
"nav_loyalty": "Fidelidad",
|
| 64 |
+
"events_title": "Eventos & Bodas",
|
| 65 |
+
"events_sub": "Organiza tus momentos especiales en un marco idílico con cocina asiática.",
|
| 66 |
+
"reserve_title": "Reservar mesa",
|
| 67 |
+
"order_title": "Hacer pedido",
|
| 68 |
+
"loyalty_title": "Tarjeta de fidelidad",
|
| 69 |
+
"reserve_intro": "Reserva tu mesa en segundos.",
|
| 70 |
+
"form_name": "Nombre",
|
| 71 |
+
"form_phone": "Teléfono",
|
| 72 |
+
"form_email": "Email",
|
| 73 |
+
"form_date": "Fecha",
|
| 74 |
+
"form_time": "Hora",
|
| 75 |
+
"form_people": "Comensales",
|
| 76 |
+
"form_notes": "Notas (alergias, preferencias...)",
|
| 77 |
+
"form_submit": "Reservar",
|
| 78 |
+
"form_success": "¡Gracias! Hemos recibido tu solicitud. Te confirmamos pronto.",
|
| 79 |
+
"form_error_validation": "Por favor, completa los campos obligatorios.",
|
| 80 |
+
"order_intro": "Haz tu pedido y recógelo en el local.",
|
| 81 |
+
"order_call": "Pedir por teléfono",
|
| 82 |
+
"order_whatsapp": "Enviar por WhatsApp",
|
| 83 |
+
"order_hours_title": "Horarios",
|
| 84 |
+
"order_hours_value": "Todos los días 12:00 – 22:30",
|
| 85 |
+
"wa_template_order": "Hola, quiero hacer un pedido: {order}. Retiro {time}. Nombre: {name}. ¡Gracias!",
|
| 86 |
+
"reserve_email_subject": "Reserva – Sabaidi"
|
| 87 |
+
},
|
| 88 |
+
"en": {
|
| 89 |
+
"nav_home": "Home",
|
| 90 |
+
"nav_menu": "Menu",
|
| 91 |
+
"nav_gallery": "Gallery",
|
| 92 |
+
"nav_contact": "Contact",
|
| 93 |
+
"hero_title": "Sabaidi — Restaurant & Bar",
|
| 94 |
+
"hero_subtitle": "Asian‑inspired cooking, poolside cocktails, and sunny vibes on Las Terrenas beach.",
|
| 95 |
+
"hero_cta": "See the menu",
|
| 96 |
+
"home_section_title": "Taste our classics",
|
| 97 |
+
"home_section_sub": "Selection of popular dishes",
|
| 98 |
+
"menu_title": "Our menu",
|
| 99 |
+
"menu_starters": "Starters",
|
| 100 |
+
"menu_mains": "Main courses",
|
| 101 |
+
"menu_note": "Prices in RDS. 'Loc lac' dishes can be served with egg (+60 RDS).",
|
| 102 |
+
"footer": "Aligio Apart‑Hotel & Spa • Las Terrenas • Dominican Republic",
|
| 103 |
+
"nav_reserve": "Reserve",
|
| 104 |
+
"nav_order": "Order",
|
| 105 |
+
"nav_events": "Events",
|
| 106 |
+
"nav_loyalty": "Loyalty",
|
| 107 |
+
"events_title": "Events & Weddings",
|
| 108 |
+
"events_sub": "Host your special moments in an idyllic setting with refined Asian cuisine.",
|
| 109 |
+
"reserve_title": "Book a table",
|
| 110 |
+
"order_title": "Order",
|
| 111 |
+
"loyalty_title": "Loyalty card",
|
| 112 |
+
"reserve_intro": "Book your table in seconds.",
|
| 113 |
+
"form_name": "Name",
|
| 114 |
+
"form_phone": "Phone",
|
| 115 |
+
"form_email": "Email",
|
| 116 |
+
"form_date": "Date",
|
| 117 |
+
"form_time": "Time",
|
| 118 |
+
"form_people": "Guests",
|
| 119 |
+
"form_notes": "Notes (allergies, preferences...)",
|
| 120 |
+
"form_submit": "Reserve",
|
| 121 |
+
"form_success": "Thanks! We’ve received your request and will confirm shortly.",
|
| 122 |
+
"form_error_validation": "Please fill in the required fields.",
|
| 123 |
+
"order_intro": "Place your order and pick it up at the restaurant.",
|
| 124 |
+
"order_call": "Order by phone",
|
| 125 |
+
"order_whatsapp": "Send via WhatsApp",
|
| 126 |
+
"order_hours_title": "Opening hours",
|
| 127 |
+
"order_hours_value": "Every day 12:00 – 22:30",
|
| 128 |
+
"wa_template_order": "Hello, I'd like to place an order: {order}. Pickup {time}. Name: {name}. Thank you!",
|
| 129 |
+
"reserve_email_subject": "Reservation – Sabaidi"
|
| 130 |
+
}
|
| 131 |
+
};
|
| 132 |
+
window.SABAIDI_MENU = {
|
| 133 |
+
"starters": [
|
| 134 |
+
{
|
| 135 |
+
"code": "E1",
|
| 136 |
+
"image": "spring_rolls.webp",
|
| 137 |
+
"fr": "Nem porc (x4)",
|
| 138 |
+
"es": "Nem cerdo (x4)",
|
| 139 |
+
"en": "Nem pork (x4)",
|
| 140 |
+
"price": "350 RDS"
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"code": "E2",
|
| 144 |
+
"image": "spring_rolls.webp",
|
| 145 |
+
"fr": "Nem poulet (x4)",
|
| 146 |
+
"es": "Nem pollo (x4)",
|
| 147 |
+
"en": "Nem chicken (x4)",
|
| 148 |
+
"price": "350 RDS"
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"code": "E3",
|
| 152 |
+
"image": "beignets_crevettes.png",
|
| 153 |
+
"fr": "Beignet de crevettes (x4)",
|
| 154 |
+
"es": "Buñuelo de camarones (x4)",
|
| 155 |
+
"en": "Shrimp fritter (x4)",
|
| 156 |
+
"price": "400 RDS"
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"code": "E4",
|
| 160 |
+
"image": "spring_rolls.webp",
|
| 161 |
+
"fr": "Rouleau de printemps (x2)",
|
| 162 |
+
"es": "Rollo de primavera (x2)",
|
| 163 |
+
"en": "Spring roll (x2)",
|
| 164 |
+
"price": "400 RDS"
|
| 165 |
+
},
|
| 166 |
+
{
|
| 167 |
+
"code": "E5",
|
| 168 |
+
"image": "samoussas.png",
|
| 169 |
+
"fr": "Samoussa (x4)",
|
| 170 |
+
"es": "Samosa (x4)",
|
| 171 |
+
"en": "Samosa (x4)",
|
| 172 |
+
"price": "400 RDS"
|
| 173 |
+
}
|
| 174 |
+
],
|
| 175 |
+
"mains": [
|
| 176 |
+
{
|
| 177 |
+
"code": "P1",
|
| 178 |
+
"image": "burger.webp",
|
| 179 |
+
"fr": "Bo bun poulet",
|
| 180 |
+
"es": "Bo bun pollo",
|
| 181 |
+
"en": "Bo bun chicken",
|
| 182 |
+
"price": "650 RDS"
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"code": "P2",
|
| 186 |
+
"image": "noodles.webp",
|
| 187 |
+
"fr": "Pad Thaï crevettes",
|
| 188 |
+
"es": "Pad Thai camarones",
|
| 189 |
+
"en": "Pad Thai shrimp",
|
| 190 |
+
"price": "850 RDS"
|
| 191 |
+
},
|
| 192 |
+
{
|
| 193 |
+
"code": "P3",
|
| 194 |
+
"image": "noodles.webp",
|
| 195 |
+
"fr": "Pad Thaï poulet",
|
| 196 |
+
"es": "Pad Thai pollo",
|
| 197 |
+
"en": "Pad Thai chicken",
|
| 198 |
+
"price": "700 RDS"
|
| 199 |
+
},
|
| 200 |
+
{
|
| 201 |
+
"code": "P4",
|
| 202 |
+
"image": "sabaidi_sign.webp",
|
| 203 |
+
"fr": "Riz loc lac poulet (+ œuf +60 RDS)",
|
| 204 |
+
"es": "Arroz loc lac pollo (con huevo +60 RDS)",
|
| 205 |
+
"en": "Rice loc lac chicken (with egg +60 RDS)",
|
| 206 |
+
"price": "700 RDS"
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"code": "P5",
|
| 210 |
+
"image": "sabaidi_sign.webp",
|
| 211 |
+
"fr": "Riz loc lac bœuf (+ œuf +60 RDS)",
|
| 212 |
+
"es": "Arroz loc lac res (con huevo +60 RDS)",
|
| 213 |
+
"en": "Rice loc lac beef (with egg +60 RDS)",
|
| 214 |
+
"price": "900 RDS"
|
| 215 |
+
},
|
| 216 |
+
{
|
| 217 |
+
"code": "P6",
|
| 218 |
+
"image": "sabaidi_sign.webp",
|
| 219 |
+
"fr": "Riz cantonnais",
|
| 220 |
+
"es": "Arroz cantonés",
|
| 221 |
+
"en": "Cantonese rice",
|
| 222 |
+
"price": "400 RDS"
|
| 223 |
+
}
|
| 224 |
+
]
|
| 225 |
+
};
|
| 226 |
+
(function(){
|
| 227 |
+
const LS_KEY = "sabaidi_lang";
|
| 228 |
+
function setLangButtonsActive(lang) {
|
| 229 |
+
document.querySelectorAll('.lang-switch button').forEach(b=>{b.classList.toggle('active', b.dataset.lang===lang)});
|
| 230 |
+
}
|
| 231 |
+
window.setLanguage = function(lang) {
|
| 232 |
+
const dict = window.SABAIDI_I18N[lang] || window.SABAIDI_I18N.fr;
|
| 233 |
+
document.querySelectorAll('[data-i18n]').forEach(el=>{
|
| 234 |
+
const key = el.getAttribute('data-i18n');
|
| 235 |
+
if(dict[key]) el.textContent = dict[key];
|
| 236 |
+
});
|
| 237 |
+
localStorage.setItem(LS_KEY, lang);
|
| 238 |
+
setLangButtonsActive(lang);
|
| 239 |
+
// re-render menu if present
|
| 240 |
+
if (typeof renderMenu === 'function') renderMenu(lang);
|
| 241 |
+
};
|
| 242 |
+
window.getLanguage = function() {
|
| 243 |
+
return localStorage.getItem(LS_KEY) || 'fr';
|
| 244 |
+
};
|
| 245 |
+
document.addEventListener('DOMContentLoaded', function(){
|
| 246 |
+
const lang = getLanguage();
|
| 247 |
+
setLanguage(lang);
|
| 248 |
+
setLangButtonsActive(lang);
|
| 249 |
+
});
|
| 250 |
+
})();
|
commander.html
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Commander</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<header class="nav">
|
| 13 |
+
<div class="container wrap">
|
| 14 |
+
<div class="brand">
|
| 15 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 16 |
+
<div class="title">Sabaidi</div>
|
| 17 |
+
</div>
|
| 18 |
+
<nav>
|
| 19 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 20 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 21 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 22 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 23 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 24 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 25 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 26 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 27 |
+
</nav>
|
| 28 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 29 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 30 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 31 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
</header>
|
| 35 |
+
|
| 36 |
+
<section class="section">
|
| 37 |
+
<div class="container">
|
| 38 |
+
<h2 class="gold" data-i18n="nav_order">Commander</h2>
|
| 39 |
+
<p class="note" data-i18n="order_intro">Passez commande et récupérez sur place.</p>
|
| 40 |
+
<div class="form" style="margin-top:14px">
|
| 41 |
+
<form id="orderForm">
|
| 42 |
+
<div class="input-row">
|
| 43 |
+
<div><label data-i18n="form_name">Nom</label><input type="text" name="name" placeholder="Jane Doe"/></div>
|
| 44 |
+
<div><label data-i18n="form_time">Heure</label><input type="time" name="time"/></div>
|
| 45 |
+
</div>
|
| 46 |
+
<div class="input-row">
|
| 47 |
+
<div style="grid-column:1/-1">
|
| 48 |
+
<label>Commande</label>
|
| 49 |
+
<textarea name="order" placeholder="Pad Thaï crevettes x2, Bo bun poulet x1..."></textarea>
|
| 50 |
+
</div>
|
| 51 |
+
</div>
|
| 52 |
+
<div class="input-row">
|
| 53 |
+
<button type="button" id="waBtn" class="btn" data-i18n="order_whatsapp">Envoyer sur WhatsApp</button>
|
| 54 |
+
<a class="btn secondary" href="tel:+18090000000" data-i18n="order_call">Commander par téléphone</a>
|
| 55 |
+
</div>
|
| 56 |
+
</form>
|
| 57 |
+
</div>
|
| 58 |
+
<div class="card" style="margin-top:16px">
|
| 59 |
+
<div class="pad">
|
| 60 |
+
<div class="title" data-i18n="order_hours_title">Horaires</div>
|
| 61 |
+
<p class="note" data-i18n="order_hours_value">Tous les jours 12:00 – 22:30</p>
|
| 62 |
+
</div>
|
| 63 |
+
</div>
|
| 64 |
+
</div>
|
| 65 |
+
</section>
|
| 66 |
+
|
| 67 |
+
<footer>
|
| 68 |
+
<div class="container">
|
| 69 |
+
<p class="small" data-i18n="footer">Aligio Apart-Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 70 |
+
</div>
|
| 71 |
+
</footer>
|
| 72 |
+
<script src="assets/js/i18n.js"></script>
|
| 73 |
+
<script src="assets/js/app.js"></script>
|
| 74 |
+
<script>document.addEventListener('DOMContentLoaded',()=>setLanguage(getLanguage()));</script>
|
| 75 |
+
</body>
|
| 76 |
+
</html>
|
contact.html
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Contact</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
<header class="nav">
|
| 15 |
+
<div class="container wrap">
|
| 16 |
+
<div class="brand">
|
| 17 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 18 |
+
<div class="title">Sabaidi</div>
|
| 19 |
+
</div>
|
| 20 |
+
<nav>
|
| 21 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 22 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 23 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 24 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 25 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 26 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 27 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 28 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 29 |
+
</nav>
|
| 30 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 31 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 32 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 33 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 34 |
+
</div>
|
| 35 |
+
</div>
|
| 36 |
+
</header>
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
<section class="section">
|
| 40 |
+
<div class="container">
|
| 41 |
+
<h2 data-i18n="nav_contact">Contact</h2>
|
| 42 |
+
<p>Sabaidi • Aligio Apart‑Hotel & Spa • Las Terrenas</p>
|
| 43 |
+
<p>Email: <a href="mailto:hello@sabaidi.example">hello@sabaidi.example</a> · Tel: +1 809 000 0000</p>
|
| 44 |
+
</div>
|
| 45 |
+
</section>
|
| 46 |
+
|
| 47 |
+
<footer>
|
| 48 |
+
<div class="container">
|
| 49 |
+
<p class="small" data-i18n="footer">Aligio Apart‑Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 50 |
+
</div>
|
| 51 |
+
</footer>
|
| 52 |
+
|
| 53 |
+
<script src="assets/js/i18n.js"></script>
|
| 54 |
+
<script src="assets/js/app.js"></script>
|
| 55 |
+
</body>
|
| 56 |
+
</html>
|
evenements.html
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Page</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<header class="nav">
|
| 13 |
+
<div class="container wrap">
|
| 14 |
+
<div class="brand">
|
| 15 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 16 |
+
<div class="title">Sabaidi</div>
|
| 17 |
+
</div>
|
| 18 |
+
<nav>
|
| 19 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 20 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 21 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 22 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 23 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 24 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 25 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 26 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 27 |
+
</nav>
|
| 28 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 29 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 30 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 31 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
</header>
|
| 35 |
+
|
| 36 |
+
<section class="hero">
|
| 37 |
+
<div class="container content">
|
| 38 |
+
<div>
|
| 39 |
+
<h1 class="gold" data-i18n="events_title">events_title</h1>
|
| 40 |
+
<p class="tagline" data-i18n="events_sub">Organisez vos moments spéciaux dans un cadre idyllique, cuisine asiatique raffinée.</p>
|
| 41 |
+
</div>
|
| 42 |
+
<div class="art hero-carousel">
|
| 43 |
+
|
| 44 |
+
<img src="assets/images/sabaidi_sign.webp" class="active" alt="Sabaidi beach"/>
|
| 45 |
+
<img src="assets/images/beignets_crevettes.png" alt="Beignets de crevettes"/>
|
| 46 |
+
<img src="assets/images/samoussas.png" alt="Samoussas"/>
|
| 47 |
+
<img src="assets/images/noodles.webp" alt="Pad Thai"/>
|
| 48 |
+
</div>
|
| 49 |
+
</div>
|
| 50 |
+
</section>
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
<section class="section">
|
| 54 |
+
<div class="container">
|
| 55 |
+
<div class="grid">
|
| 56 |
+
<div class="card"><img src="assets/images/spring_rolls.webp" alt=""><div class="pad"><div class="title">Mariages sur-mesure</div><p class="note">Cérémonie, banquet, musique — nous orchestrons votre journée parfaite.</p></div></div>
|
| 57 |
+
<div class="card"><img src="assets/images/burger.webp" alt=""><div class="pad"><div class="title">Événements d’entreprise</div><p class="note">Séminaires, fêtes d’équipe, lancements — espaces privatifs et menu dédié.</p></div></div>
|
| 58 |
+
<div class="card"><img src="assets/images/noodles.webp" alt=""><div class="pad"><div class="title">Anniversaires & fêtes</div><p class="note">Formules conviviales, cocktails signature, ambiance bord de mer.</p></div></div>
|
| 59 |
+
</div>
|
| 60 |
+
</div>
|
| 61 |
+
</section>
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
<footer>
|
| 65 |
+
<div class="container">
|
| 66 |
+
<p class="small" data-i18n="footer">Aligio Apart-Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 67 |
+
</div>
|
| 68 |
+
</footer>
|
| 69 |
+
<script src="assets/js/i18n.js"></script>
|
| 70 |
+
<script>document.addEventListener('DOMContentLoaded',()=>setLanguage(getLanguage()));</script>
|
| 71 |
+
<script src="assets/js/app.js"></script>
|
| 72 |
+
</body>
|
| 73 |
+
</html>
|
fidelite.html
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Page</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<header class="nav">
|
| 13 |
+
<div class="container wrap">
|
| 14 |
+
<div class="brand">
|
| 15 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 16 |
+
<div class="title">Sabaidi</div>
|
| 17 |
+
</div>
|
| 18 |
+
<nav>
|
| 19 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 20 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 21 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 22 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 23 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 24 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 25 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 26 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 27 |
+
</nav>
|
| 28 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 29 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 30 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 31 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
</header>
|
| 35 |
+
|
| 36 |
+
<section class="hero">
|
| 37 |
+
<div class="container content">
|
| 38 |
+
<div>
|
| 39 |
+
<h1 class="gold" data-i18n="loyalty_title">loyalty_title</h1>
|
| 40 |
+
<p class="tagline" data-i18n="events_sub">Organisez vos moments spéciaux dans un cadre idyllique, cuisine asiatique raffinée.</p>
|
| 41 |
+
</div>
|
| 42 |
+
<div class="art">
|
| 43 |
+
<img src="assets/images/sabaidi_sign.webp" alt="Sabaidi sign"/>
|
| 44 |
+
</div>
|
| 45 |
+
</div>
|
| 46 |
+
</section>
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
<section class="section">
|
| 50 |
+
<div class="container">
|
| 51 |
+
<div class="card"><div class="pad">
|
| 52 |
+
<div class="title">Avantages</div>
|
| 53 |
+
<ul class="note">
|
| 54 |
+
<li>• 10% de remise dès 5 visites</li>
|
| 55 |
+
<li>• Boisson offerte pour votre anniversaire</li>
|
| 56 |
+
<li>• Invites à des événements privés</li>
|
| 57 |
+
</ul>
|
| 58 |
+
</div></div>
|
| 59 |
+
</div>
|
| 60 |
+
</section>
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
<footer>
|
| 64 |
+
<div class="container">
|
| 65 |
+
<p class="small" data-i18n="footer">Aligio Apart-Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 66 |
+
</div>
|
| 67 |
+
</footer>
|
| 68 |
+
<script src="assets/js/i18n.js"></script>
|
| 69 |
+
<script>document.addEventListener('DOMContentLoaded',()=>setLanguage(getLanguage()));</script>
|
| 70 |
+
<script src="assets/js/app.js"></script>
|
| 71 |
+
</body>
|
| 72 |
+
</html>
|
gallery.html
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Galerie</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
<header class="nav">
|
| 15 |
+
<div class="container wrap">
|
| 16 |
+
<div class="brand">
|
| 17 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 18 |
+
<div class="title">Sabaidi</div>
|
| 19 |
+
</div>
|
| 20 |
+
<nav>
|
| 21 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 22 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 23 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 24 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 25 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 26 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 27 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 28 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 29 |
+
</nav>
|
| 30 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 31 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 32 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 33 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 34 |
+
</div>
|
| 35 |
+
</div>
|
| 36 |
+
</header>
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
<section class="section">
|
| 40 |
+
<div class="container">
|
| 41 |
+
<h2 data-i18n="nav_gallery">Galerie</h2>
|
| 42 |
+
<div class="grid gallery">
|
| 43 |
+
<img class="card" src="assets/images/sabaidi_sign.webp" alt="Sabaidi sign"/>
|
| 44 |
+
<img class="card" src="assets/images/spring_rolls.webp" alt="Spring rolls"/>
|
| 45 |
+
<img class="card" src="assets/images/noodles.webp" alt="Noodles"/>
|
| 46 |
+
<img class="card" src="assets/images/burger.webp" alt="Burger"/>
|
| 47 |
+
<img class="card" src="assets/images/beignets_crevettes.png" alt="Beignets de crevettes"/>
|
| 48 |
+
<img class="card" src="assets/images/samoussas.png" alt="Samoussas"/>
|
| 49 |
+
</div>
|
| 50 |
+
</div>
|
| 51 |
+
</section>
|
| 52 |
+
|
| 53 |
+
<footer>
|
| 54 |
+
<div class="container">
|
| 55 |
+
<p class="small" data-i18n="footer">Aligio Apart‑Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 56 |
+
</div>
|
| 57 |
+
</footer>
|
| 58 |
+
|
| 59 |
+
<script src="assets/js/i18n.js"></script>
|
| 60 |
+
<script src="assets/js/app.js"></script>
|
| 61 |
+
</body>
|
| 62 |
+
</html>
|
index.html
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Restaurant & Bar</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
<meta name="description" content="Sabaidi Restaurant & Bar — Las Terrenas"/>
|
| 11 |
+
</head>
|
| 12 |
+
<body>
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
<header class="nav">
|
| 16 |
+
<div class="container wrap">
|
| 17 |
+
<div class="brand">
|
| 18 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 19 |
+
<div class="title">Sabaidi</div>
|
| 20 |
+
</div>
|
| 21 |
+
<nav>
|
| 22 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 23 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 24 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 25 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 26 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 27 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 28 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 29 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 30 |
+
</nav>
|
| 31 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 32 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 33 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 34 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 35 |
+
</div>
|
| 36 |
+
</div>
|
| 37 |
+
</header>
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
<section class="hero">
|
| 42 |
+
<div class="container content">
|
| 43 |
+
<div class="hero-carousel">
|
| 44 |
+
<img src="assets/images/sabaidi_sign.webp" class="active" alt="Sabaidi beach"/>
|
| 45 |
+
<img src="assets/images/noodles.webp" alt="Noodles"/>
|
| 46 |
+
<img src="assets/images/spring_rolls.webp" alt="Spring rolls"/>
|
| 47 |
+
<img src="assets/images/burger.webp" alt="Burger"/>
|
| 48 |
+
<div class="carousel-overlay">
|
| 49 |
+
<h1 class="gold" data-i18n="hero_title">Sabaidi — Restaurant & Bar</h1>
|
| 50 |
+
<p class="tagline" data-i18n="hero_subtitle">Cuisine d'inspiration asiatique, cocktails au bord de la piscine, et bonne humeur sur la plage de Las Terrenas.</p>
|
| 51 |
+
<a class="cta" href="menu.html" data-i18n="hero_cta">Voir la carte</a>
|
| 52 |
+
</div>
|
| 53 |
+
</div>
|
| 54 |
+
</div>
|
| 55 |
+
</section>
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
<section class="section">
|
| 59 |
+
<div class="container">
|
| 60 |
+
<h2 data-i18n="home_section_title">Goûtez nos classiques</h2>
|
| 61 |
+
<p class="note" data-i18n="home_section_sub">Sélection de plats populaires</p>
|
| 62 |
+
<div class="grid gallery">
|
| 63 |
+
<div class="card">
|
| 64 |
+
<img src="assets/images/spring_rolls.webp" alt="Spring rolls"/>
|
| 65 |
+
<div class="pad">
|
| 66 |
+
<div class="title">Spring Rolls</div>
|
| 67 |
+
<div class="row"><span class="badge">E4</span><span>400 RDS</span></div>
|
| 68 |
+
</div>
|
| 69 |
+
</div>
|
| 70 |
+
<div class="card">
|
| 71 |
+
<img src="assets/images/noodles.webp" alt="Pad Thai"/>
|
| 72 |
+
<div class="pad">
|
| 73 |
+
<div class="title">Pad Thaï</div>
|
| 74 |
+
<div class="row"><span class="badge">P2/P3</span><span>700–850 RDS</span></div>
|
| 75 |
+
</div>
|
| 76 |
+
</div>
|
| 77 |
+
<div class="card">
|
| 78 |
+
<img src="assets/images/burger.webp" alt="Bo bun chicken"/>
|
| 79 |
+
<div class="pad">
|
| 80 |
+
<div class="title">Bo bun poulet</div>
|
| 81 |
+
<div class="row"><span class="badge">P1</span><span>650 RDS</span></div>
|
| 82 |
+
</div>
|
| 83 |
+
</div>
|
| 84 |
+
</div>
|
| 85 |
+
</div>
|
| 86 |
+
</section>
|
| 87 |
+
|
| 88 |
+
<section class="section">
|
| 89 |
+
<div class="container">
|
| 90 |
+
<div class="grid">
|
| 91 |
+
<div class="card">
|
| 92 |
+
<img src="assets/images/menu_board.png" alt="Original menu board"/>
|
| 93 |
+
<div class="pad">
|
| 94 |
+
<div class="title">Menu Board</div>
|
| 95 |
+
<p class="note">Version photographiée de la carte pour référence.</p>
|
| 96 |
+
<div class="row"><a class="badge" href="assets/images/menu_board.png" download>PNG</a><span></span></div>
|
| 97 |
+
</div>
|
| 98 |
+
</div>
|
| 99 |
+
</div>
|
| 100 |
+
</div>
|
| 101 |
+
</section>
|
| 102 |
+
<section class="section">
|
| 103 |
+
<div class="container">
|
| 104 |
+
<h2 class="gold">À propos</h2>
|
| 105 |
+
<div class="grid">
|
| 106 |
+
<div class="card"><div class="pad"><div class="title">À propos</div><div class="note"><!-- Navigation -->
|
| 107 |
+
<nav class="bg-white shadow-lg fixed w-full z-50">
|
| 108 |
+
<div class="max-w-7xl mx-auto px-4">
|
| 109 |
+
<div class="flex justify-between items-center h-20">
|
| 110 |
+
<div class="flex items-center">
|
| 111 |
+
<a href="index.html" class="flex items-center">
|
| 112 |
+
<span class="text-2xl font-bold text-red-600">Sabaidi</span>
|
| 113 |
+
</a>
|
| 114 |
+
</div>
|
| 115 |
+
<div class="hidden md:flex items-center space-x-8">
|
| 116 |
+
<a href="index.html" class="text-gray-700 hover:text-red-600 transition">Accueil</a>
|
| 117 |
+
<a href="reserver.html" class="text-gray-700 hover:text-red-600 transition">Réserver</a>
|
| 118 |
+
<a href="commander.html" class="text-gray-700 hover:text-red-600 transition">Commander</a>
|
| 119 |
+
<a href="evenements.html" class="text-red-600 font-medium">Événements & Mariages</a>
|
| 120 |
+
<a href="carte.html" class="text-gray-700 hover:text-red-600 transition">Notre Carte</a>
|
| 121 |
+
<a href="fidelite.html" class="text-gray-700 hover:text-red-600 transition">Carte de Fidélité</a>
|
| 122 |
+
<div class="language-selector relative">
|
| 123 |
+
<button class="flex items-center space-x-1 text-gray-700">
|
| 124 |
+
<i data-feather="globe"></i>
|
| 125 |
+
<span>FR</span>
|
| 126 |
+
</button>
|
| 127 |
+
<div class="language-dropdown hidden absolute right-0 mt-2 w-32 bg-white shadow-lg rounded-md py-1 z-50">
|
| 128 |
+
<a href="#" class="block px-4 py-2 text-gray-700 hover:bg-gray-100">Français</a>
|
| 129 |
+
<a href="#" class="block px-4 py-2 text-gray-700 hover:bg-gray-100">Español</a>
|
| 130 |
+
<a href="#" class="block px-4 py-2 text-gray-700 hover:bg-gray-100">English</a>
|
| 131 |
+
</div>
|
| 132 |
+
</div>
|
| 133 |
+
</div>
|
| 134 |
+
<div class="md:hidden">
|
| 135 |
+
<button class="mobile-menu-button p-2 focus:outline-none">
|
| 136 |
+
<i data-feather="menu"></i>
|
| 137 |
+
</button>
|
| 138 |
+
</div>
|
| 139 |
+
</div>
|
| 140 |
+
</div>
|
| 141 |
+
</nav>
|
| 142 |
+
|
| 143 |
+
<!-- Events Hero -->
|
| 144 |
+
<section class="pt-32 pb-20 bg-gray-900 text-white">
|
| 145 |
+
<div class="max-w-7xl mx-auto px-4 text-center">
|
| 146 |
+
<h1 class="text-4xl md:text-5xl font-bold mb-6">Événements & Mariages</h1>
|
| 147 |
+
<p class="text-xl text-gray-300 max-w-3xl mx-auto">Organisez vos événements spéciaux dans un cadre exceptionnel avec une cuisine asiatique raffinée.</p>
|
| 148 |
+
</div>
|
| 149 |
+
</section>
|
| 150 |
+
|
| 151 |
+
<!-- Events Content -->
|
| 152 |
+
<section class="py-16 bg-white">
|
| 153 |
+
<div class="max-w-7xl mx-auto px-4">
|
| 154 |
+
<div class="text-center mb-16">
|
| 155 |
+
<h2 class="text-3xl font-bold text-gray-800 mb-4">Un lieu unique pour vos moments spéciaux</h2>
|
| 156 |
+
<p class="text-gray-600 max-w-3xl mx-auto">Que ce soit pour un mariage, un anniversaire, un dîner d'entreprise ou tout autre événement, Sabaidi offre un cadre idyllique avec une vue imprenable sur la mer, une piscine et une équipe dédiée à faire de votre événement un moment inoubliable.</p>
|
| 157 |
+
</div>
|
| 158 |
+
|
| 159 |
+
<div class="grid md:grid-cols-3 gap-8 mb-16">
|
| 160 |
+
<!-- Event 1 -->
|
| 161 |
+
<div class="event-card bg-white rounded-xl shadow-md overflow-hidden" data-aos="fade-up">
|
| 162 |
+
<div class="h-48 overflow-hidden">
|
| 163 |
+
<img src="http://static.photos/event/640x360/1" alt="Mariages" class="w-full h-full object-cover">
|
| 164 |
+
</div>
|
| 165 |
+
<div class="p-6">
|
| 166 |
+
<h3 class="text-xl font-bold text-gray-800 mb-2">Mariages</h3>
|
| 167 |
+
<p class="text-gray-600 mb-4">Célébrez votre union dans un cadre romantique avec un menu personnalisé et un service d'exception.</p>
|
| 168 |
+
<div class="flex items-center text-red-600 font-medium">
|
| 169 |
+
<span>À partir de 50€/personne</span>
|
| 170 |
+
</div>
|
| 171 |
+
</div>
|
| 172 |
+
</div>
|
| 173 |
+
|
| 174 |
+
<!-- Event 2 -->
|
| 175 |
+
<div class="event-card bg-white rounded-xl shadow-md overflow-hidden" data-aos="fade-up" data-aos-delay="100">
|
| 176 |
+
<div class="h-48 overflow-hidden">
|
| 177 |
+
<img src="http://static.photos/event/</div></div></div>
|
| 178 |
+
</div>
|
| 179 |
+
</div>
|
| 180 |
+
</section>
|
| 181 |
+
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
<footer>
|
| 185 |
+
<div class="container">
|
| 186 |
+
<p class="small" data-i18n="footer">Aligio Apart‑Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 187 |
+
</div>
|
| 188 |
+
</footer>
|
| 189 |
+
|
| 190 |
+
<script src="assets/js/i18n.js"></script>
|
| 191 |
+
<script>
|
| 192 |
+
// Ensure the landing page picks the saved language
|
| 193 |
+
document.addEventListener('DOMContentLoaded', () => setLanguage(getLanguage()));
|
| 194 |
+
</script>
|
| 195 |
+
<script src="assets/js/app.js"></script>
|
| 196 |
+
</body>
|
| 197 |
+
</html>
|
menu.html
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Menu</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
<header class="nav">
|
| 15 |
+
<div class="container wrap">
|
| 16 |
+
<div class="brand">
|
| 17 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 18 |
+
<div class="title">Sabaidi</div>
|
| 19 |
+
</div>
|
| 20 |
+
<nav>
|
| 21 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 22 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 23 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 24 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 25 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 26 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 27 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 28 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 29 |
+
</nav>
|
| 30 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 31 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 32 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 33 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 34 |
+
</div>
|
| 35 |
+
</div>
|
| 36 |
+
</header>
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
<section class="section">
|
| 40 |
+
<div class="container">
|
| 41 |
+
<h2 data-i18n="menu_title">Notre carte</h2>
|
| 42 |
+
<p class="note" data-i18n="menu_note">Prix en RDS. Options avec œuf pour les plats 'loc lac' (+60 RDS).</p>
|
| 43 |
+
<h3 style="color:#F5C542;margin:20px 0 10px" data-i18n="menu_starters">Entrées</h3>
|
| 44 |
+
<div id="grid-starters" class="grid"></div>
|
| 45 |
+
<h3 style="color:#F5C542;margin:26px 0 10px" data-i18n="menu_mains">Plats</h3>
|
| 46 |
+
<div id="grid-mains" class="grid"></div>
|
| 47 |
+
</div>
|
| 48 |
+
</section>
|
| 49 |
+
|
| 50 |
+
<footer>
|
| 51 |
+
<div class="container">
|
| 52 |
+
<p class="small" data-i18n="footer">Aligio Apart‑Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 53 |
+
</div>
|
| 54 |
+
</footer>
|
| 55 |
+
|
| 56 |
+
<script src="assets/js/i18n.js"></script>
|
| 57 |
+
<script>
|
| 58 |
+
function createCard(item, lang) {
|
| 59 |
+
const title = item[lang] || item.fr;
|
| 60 |
+
const img = "assets/images/" + (item.image || "sabaidi_logo.webp");
|
| 61 |
+
const el = document.createElement('div');
|
| 62 |
+
el.className = 'card';
|
| 63 |
+
el.innerHTML = `
|
| 64 |
+
<img src="${img}" alt="${title}"/>
|
| 65 |
+
<div class="pad">
|
| 66 |
+
<div class="title">${title}</div>
|
| 67 |
+
<div class="row"><span class="badge">${item.code}</span><span>${item.price}</span></div>
|
| 68 |
+
</div>`;
|
| 69 |
+
return el;
|
| 70 |
+
}
|
| 71 |
+
window.renderMenu = function(lang) {
|
| 72 |
+
lang = lang || getLanguage();
|
| 73 |
+
const starters = window.SABAIDI_MENU.starters;
|
| 74 |
+
const mains = window.SABAIDI_MENU.mains;
|
| 75 |
+
const gs = document.getElementById('grid-starters');
|
| 76 |
+
const gm = document.getElementById('grid-mains');
|
| 77 |
+
gs.innerHTML = ''; gm.innerHTML = '';
|
| 78 |
+
starters.forEach(i=> gs.appendChild(createCard(i, lang)));
|
| 79 |
+
mains.forEach(i=> gm.appendChild(createCard(i, lang)));
|
| 80 |
+
};
|
| 81 |
+
document.addEventListener('DOMContentLoaded', function(){
|
| 82 |
+
renderMenu(getLanguage());
|
| 83 |
+
});
|
| 84 |
+
</script>
|
| 85 |
+
<script src="assets/js/app.js"></script>
|
| 86 |
+
</body>
|
| 87 |
+
</html>
|
reserver.html
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<html lang="fr">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8"/>
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
| 6 |
+
<title>Sabaidi — Réserver</title>
|
| 7 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&family=Montserrat:wght@400;600;700;900&family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="assets/css/styles.css"/>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<header class="nav">
|
| 13 |
+
<div class="container wrap">
|
| 14 |
+
<div class="brand">
|
| 15 |
+
<img class="logo" src="assets/images/sabaidi_logo.webp" alt="Sabaidi logo"/>
|
| 16 |
+
<div class="title">Sabaidi</div>
|
| 17 |
+
</div>
|
| 18 |
+
<nav>
|
| 19 |
+
<a href="index.html" data-i18n="nav_home">Accueil</a>
|
| 20 |
+
<a href="reserver.html" data-i18n="nav_reserve">Réserver</a>
|
| 21 |
+
<a href="commander.html" data-i18n="nav_order">Commander</a>
|
| 22 |
+
<a href="evenements.html" data-i18n="nav_events">Événements</a>
|
| 23 |
+
<a href="menu.html" data-i18n="nav_menu">La Carte</a>
|
| 24 |
+
<a href="fidelite.html" data-i18n="nav_loyalty">Fidélité</a>
|
| 25 |
+
<a href="gallery.html" data-i18n="nav_gallery">Galerie</a>
|
| 26 |
+
<a href="contact.html" data-i18n="nav_contact">Contact</a>
|
| 27 |
+
</nav>
|
| 28 |
+
<div class="lang-switch"><div class="theme-switch"><button id="themeToggle" onclick="setTheme(getTheme()==='light'?'dark':'light')">🌙</button></div>
|
| 29 |
+
<button data-lang="fr" onclick="setLanguage('fr')">FR</button>
|
| 30 |
+
<button data-lang="es" onclick="setLanguage('es')">ES</button>
|
| 31 |
+
<button data-lang="en" onclick="setLanguage('en')">EN</button>
|
| 32 |
+
</div>
|
| 33 |
+
</div>
|
| 34 |
+
</header>
|
| 35 |
+
|
| 36 |
+
<section class="section">
|
| 37 |
+
<div class="container">
|
| 38 |
+
<h2 class="gold" data-i18n="reserve_title">Réserver une table</h2>
|
| 39 |
+
<p class="note" data-i18n="reserve_intro">Réservez votre table en quelques secondes.</p>
|
| 40 |
+
<div class="form">
|
| 41 |
+
<form id="reserveForm">
|
| 42 |
+
<div class="input-row">
|
| 43 |
+
<div><label data-i18n="form_name">Nom</label><input name="name" required placeholder="Jane Doe"></div>
|
| 44 |
+
<div><label data-i18n="form_phone">Téléphone</label><input name="phone" required placeholder="+1 809 ..."></div>
|
| 45 |
+
</div>
|
| 46 |
+
<div class="input-row">
|
| 47 |
+
<div><label data-i18n="form_email">Email</label><input type="email" name="email" placeholder="you@example.com"></div>
|
| 48 |
+
<div><label data-i18n="form_people">Couverts</label><input type="number" min="1" max="20" name="people" required value="2"></div>
|
| 49 |
+
</div>
|
| 50 |
+
<div class="input-row">
|
| 51 |
+
<div><label data-i18n="form_date">Date</label><input type="date" name="date" required></div>
|
| 52 |
+
<div><label data-i18n="form_time">Heure</label><input type="time" name="time" required></div>
|
| 53 |
+
</div>
|
| 54 |
+
<div class="input-row" style="grid-column:1/-1">
|
| 55 |
+
<div style="grid-column:1/-1"><label data-i18n="form_notes">Notes (allergies, préférences...)</label><textarea name="notes"></textarea></div>
|
| 56 |
+
</div>
|
| 57 |
+
<div class="input-row">
|
| 58 |
+
<button class="btn" type="submit" data-i18n="form_submit">Réserver</button>
|
| 59 |
+
</div>
|
| 60 |
+
<div id="reserveOk" class="alert" style="display:none" data-i18n="form_success">Merci ! Votre demande a été prise en compte. Nous vous confirmons rapidement.</div>
|
| 61 |
+
<div id="reserveErr" class="alert error" style="display:none" data-i18n="form_error_validation">Merci de remplir les champs requis.</div>
|
| 62 |
+
</form>
|
| 63 |
+
</div>
|
| 64 |
+
</div>
|
| 65 |
+
</section>
|
| 66 |
+
|
| 67 |
+
<footer>
|
| 68 |
+
<div class="container">
|
| 69 |
+
<p class="small" data-i18n="footer">Aligio Apart-Hotel & Spa • Las Terrenas • République Dominicaine</p>
|
| 70 |
+
</div>
|
| 71 |
+
</footer>
|
| 72 |
+
<script src="assets/js/i18n.js"></script>
|
| 73 |
+
<script src="assets/js/app.js"></script>
|
| 74 |
+
<script>document.addEventListener('DOMContentLoaded',()=>setLanguage(getLanguage()));</script>
|
| 75 |
+
</body>
|
| 76 |
+
</html>
|