commit 2b0547b4840e231fc7a448b21067f8731d88989a Author: Talal Sharabi Date: Wed Dec 17 13:34:35 2025 +0400 Initial commit: Static hotel website (CMS/backend excluded) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e7be88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# Dependencies +node_modules/ +client/node_modules/ +server/ + +# Build outputs (optional - uncomment if you want to exclude build) +# client/build/ + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +client/.env* +server/.env* + +# Logs +*.log +logs/ +client/logs/ +server/logs/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# OS files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Deployment archives +*.tar.gz +*.tgz +*.zip +deploy.* +backend-deploy.* + +# Temporary files +*.tmp +*.temp +.cache/ + +# Test files +coverage/ +.nyc_output/ + +# CMS/Backend specific (exclude entire server) +server/ + +# User input files (if sensitive) +user_input_files/ + +# Build artifacts that might be regenerated +client/build/static/js/*.map +client/build/static/css/*.map + diff --git a/README.md b/README.md new file mode 100644 index 0000000..8513cf2 --- /dev/null +++ b/README.md @@ -0,0 +1,120 @@ +# The Old Vine Hotel - Website + +A modern, responsive hotel website built with React.js, featuring multilingual support (English, Arabic, French) and a fully static deployment. + +## 🌐 Live Website + +**https://oldvinehotel.com** + +## ✨ Features + +- 🎨 Modern, responsive design +- 🌐 Multilingual support (EN, AR, FR) +- 🏨 Room gallery with categories +- 📸 Photo galleries (Hotel & Restaurant) +- 📍 Contact page with Google Maps +- 📱 Mobile-optimized +- ⚡ Fully static (no backend required) +- 🎯 SEO-friendly + +## 🛠️ Technology Stack + +- **Frontend**: React.js with Material-UI +- **Routing**: React Router DOM +- **Internationalization**: i18next +- **Styling**: Material-UI (MUI) components +- **Build Tool**: Create React App +- **Deployment**: Static hosting (cPanel/GoDaddy) + +## 📁 Project Structure + +``` +vine_hotel/ +├── client/ # React frontend +│ ├── public/ # Static assets (images, JSON data) +│ ├── src/ # Source code +│ │ ├── components/ # Reusable components +│ │ ├── pages/ # Page components +│ │ ├── locales/ # Translation files +│ │ └── utils/ # Utilities +│ └── build/ # Production build (generated) +├── docs/ # Documentation +└── scripts/ # Build/deployment scripts +``` + +## 🚀 Getting Started + +### Prerequisites + +- Node.js (v16 or higher) +- npm or yarn + +### Installation + +1. **Clone the repository** + ```bash + git clone + cd vine_hotel + ``` + +2. **Install dependencies** + ```bash + cd client + npm install + ``` + +3. **Start development server** + ```bash + npm start + ``` + The website will open at `http://localhost:3060` + +### Building for Production + +```bash +cd client +npm run build +``` + +The production build will be in `client/build/` directory. + +## 📝 Content Management + +The website uses static JSON files for content, located in: +- `client/public/static-data/` - Content data files +- `client/src/locales/` - Translation files + +To update content: +1. Edit the JSON files in `client/public/static-data/` +2. Edit translations in `client/src/locales/` +3. Rebuild the site: `npm run build` + +## 🌍 Languages + +- **English (en)** - Default +- **Arabic (ar)** - العربية +- **French (fr)** - Français + +Users can switch languages using the language selector in the header. + +## 📦 Deployment + +The website is deployed as a static site. To deploy: + +1. Build the production bundle: + ```bash + cd client + npm run build + ``` + +2. Upload the contents of `client/build/` to your web server's `public_html` directory. + +3. Ensure `.htaccess` is included for proper routing. + +## 📄 License + +MIT License + +--- + +**Note**: This repository contains only the frontend/website code. The CMS/backend code is excluded from this repository. diff --git a/SETUP_GUIDE.md b/SETUP_GUIDE.md new file mode 100644 index 0000000..0657a2d --- /dev/null +++ b/SETUP_GUIDE.md @@ -0,0 +1,475 @@ +# The Old Vine Hotel - Complete Website Solution + +![The Old Vine Hotel](https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=800) + +## 🏨 Project Overview + +A comprehensive, production-ready hotel website built with modern technologies, featuring advanced booking capabilities, PMS integration, and multi-platform connectivity. This solution provides everything needed for a luxury hotel's digital presence. + +## ✨ Key Features + +### 🎯 Core Functionality +- **Modern Responsive Design** - Elegant UI with mobile-first approach +- **Real-time Booking Engine** - Complete reservation system with availability checking +- **Secure Payment Processing** - Stripe integration for safe transactions +- **Multi-language Support** - English, Arabic, French with easy expansion +- **Guest Management System** - Comprehensive profile and loyalty program management +- **Admin Dashboard** - Full control panel for hotel operations + +### 🔗 Enterprise Integrations +- **Opera PMS Integration** - Real-time synchronization with hotel management system +- **Booking Platform APIs** - Ready connections to Booking.com, Trip.com, Expedia +- **Channel Manager Ready** - Synchronized rates and availability across all platforms +- **Revenue Management** - Advanced analytics and reporting capabilities + +### 🛡️ Security & Performance +- **JWT Authentication** - Secure user sessions and API access +- **Rate Limiting** - Protection against abuse and attacks +- **Input Validation** - Comprehensive data sanitization +- **Error Handling** - Robust error management and logging +- **Performance Optimization** - Caching, compression, and efficient queries + +## 🚀 Technology Stack + +### Frontend +- **React.js 18** - Modern UI framework +- **Material-UI (MUI)** - Professional component library +- **Framer Motion** - Smooth animations and transitions +- **React Query** - Efficient data fetching and caching +- **React Router** - Client-side routing +- **i18next** - Internationalization framework +- **Axios** - HTTP client for API calls + +### Backend +- **Node.js** - Server runtime +- **Express.js** - Web application framework +- **MongoDB** - NoSQL database with Mongoose ODM +- **JWT** - JSON Web Token authentication +- **Stripe** - Payment processing +- **Nodemailer** - Email service +- **Winston** - Logging framework +- **Helmet** - Security middleware + +### Integrations +- **Opera PMS** - Property Management System +- **Booking.com API** - OTA integration +- **Expedia EQC** - Channel connectivity +- **Trip.com API** - Asian market integration +- **Google Maps** - Location services +- **WhatsApp Business** - Customer communication + +## 📋 Prerequisites + +Before installation, ensure you have: + +- **Node.js** (v16 or higher) +- **MongoDB** (v5 or higher) +- **npm** or **yarn** package manager +- **Stripe Account** (for payments) +- **Email Service** (Gmail, SendGrid, etc.) +- **Google Maps API Key** + +## 🛠️ Installation Guide + +### 1. Clone and Setup + +```bash +# Clone the repository +git clone +cd old-vine-hotel-website + +# Install all dependencies +npm run install-all +``` + +### 2. Environment Configuration + +#### Server Environment (.env) +```bash +# Copy the example file +cp server/.env.example server/.env + +# Edit with your configuration +nano server/.env +``` + +#### Client Environment +```bash +# Create client environment file +cp client/.env.example client/.env + +# Add your configuration +echo "REACT_APP_API_URL=http://localhost:5000" > client/.env +echo "REACT_APP_STRIPE_PUBLISHABLE_KEY=pk_test_..." >> client/.env +``` + +### 3. Database Setup + +```bash +# Start MongoDB service +sudo systemctl start mongod + +# Create database and seed initial data +cd server +npm run seed +``` + +### 4. Start Development Servers + +```bash +# Start both frontend and backend +npm run dev + +# Or start individually: +# Backend only +npm run server + +# Frontend only +npm run client +``` + +### 5. Access the Application + +- **Frontend**: http://localhost:3000 +- **Backend API**: http://localhost:5000 +- **Health Check**: http://localhost:5000/health + +## 🔧 Configuration Guide + +### Payment Setup (Stripe) + +1. Create a Stripe account at https://stripe.com +2. Get your API keys from the dashboard +3. Add to your environment files: + ```bash + STRIPE_SECRET_KEY=sk_test_... + REACT_APP_STRIPE_PUBLISHABLE_KEY=pk_test_... + ``` + +### Email Configuration + +#### Using Gmail +```bash +EMAIL_HOST=smtp.gmail.com +EMAIL_PORT=587 +EMAIL_USER=your-email@gmail.com +EMAIL_PASS=your-app-password # Use App Password, not regular password +``` + +#### Using SendGrid +```bash +EMAIL_HOST=smtp.sendgrid.net +EMAIL_PORT=587 +EMAIL_USER=apikey +EMAIL_PASS=your-sendgrid-api-key +``` + +### Google Maps Integration + +1. Get API key from Google Cloud Console +2. Enable Maps JavaScript API +3. Add to environment: + ```bash + GOOGLE_MAPS_API_KEY=your-api-key + ``` + +### Opera PMS Integration + +```bash +OPERA_PMS_URL=https://your-opera-server.com/api +OPERA_PMS_USERNAME=your-username +OPERA_PMS_PASSWORD=your-password +OPERA_PMS_PROPERTY_CODE=your-property-code +``` + +### Booking Platform APIs + +#### Booking.com +```bash +BOOKING_COM_API_URL=https://distribution-xml.booking.com +BOOKING_COM_USERNAME=your-username +BOOKING_COM_PASSWORD=your-password +BOOKING_COM_HOTEL_ID=your-hotel-id +``` + +#### Expedia +```bash +EXPEDIA_EQC_URL=https://services.expediapartnercentral.com +EXPEDIA_USERNAME=your-username +EXPEDIA_PASSWORD=your-password +EXPEDIA_HOTEL_ID=your-hotel-id +``` + +## 🗂️ Project Structure + +``` +old-vine-hotel-website/ +├── client/ # React frontend +│ ├── public/ # Static assets +│ ├── src/ +│ │ ├── components/ # Reusable UI components +│ │ │ ├── common/ # Shared components +│ │ │ └── layout/ # Layout components +│ │ ├── pages/ # Page components +│ │ ├── services/ # API service functions +│ │ ├── utils/ # Utility functions +│ │ ├── locales/ # Translation files +│ │ └── styles/ # CSS and theme files +│ └── package.json +├── server/ # Node.js backend +│ ├── controllers/ # Route controllers +│ ├── models/ # Database models +│ ├── routes/ # API routes +│ ├── middleware/ # Custom middleware +│ ├── services/ # Business logic services +│ ├── utils/ # Utility functions +│ └── package.json +├── docs/ # Documentation +├── deployment/ # Deployment configurations +└── README.md +``` + +## 📚 API Documentation + +### Authentication Endpoints +- `POST /api/auth/register` - Guest registration +- `POST /api/auth/login` - Guest login +- `GET /api/auth/me` - Get current user +- `POST /api/auth/forgot-password` - Password reset + +### Booking Endpoints +- `GET /api/rooms` - List available rooms +- `GET /api/rooms/:id` - Get room details +- `POST /api/rooms/:id/availability` - Check availability +- `POST /api/bookings` - Create booking +- `GET /api/bookings/:bookingNumber` - Get booking details +- `PUT /api/bookings/:bookingNumber/cancel` - Cancel booking + +### Integration Endpoints +- `GET /api/integrations/health` - Check integration status +- `POST /api/integrations/opera/sync-rooms` - Sync with Opera PMS +- `POST /api/integrations/sync-rates` - Update rates across platforms +- `GET /api/integrations/analytics/revenue` - Revenue analytics + +### Contact & Information +- `POST /api/contact` - Send contact message +- `POST /api/contact/newsletter` - Newsletter subscription +- `GET /api/contact/info` - Hotel information + +## 🔒 Security Features + +### Authentication & Authorization +- JWT-based authentication with secure token management +- Role-based access control (Guest, Admin) +- Password hashing with bcrypt +- Email verification for new accounts + +### API Security +- Rate limiting to prevent abuse +- CORS configuration for cross-origin requests +- Input validation and sanitization +- SQL injection prevention +- XSS protection headers + +### Data Protection +- Encrypted sensitive data storage +- Secure payment processing with Stripe +- GDPR compliance features +- Audit logging for admin actions + +## 📊 Performance Optimization + +### Frontend Optimization +- Code splitting and lazy loading +- Image optimization and caching +- Gzip compression +- Service worker for offline capability +- React Query for efficient data fetching + +### Backend Optimization +- Database indexing for fast queries +- Response caching with Redis +- Connection pooling +- Efficient aggregation pipelines +- Background job processing + +## 🌐 Deployment Options + +### Docker Deployment + +```bash +# Build and run with Docker Compose +docker-compose up -d +``` + +### Manual Deployment + +#### Frontend (Netlify/Vercel) +```bash +cd client +npm run build +# Deploy dist folder +``` + +#### Backend (Heroku/DigitalOcean) +```bash +cd server +npm start +``` + +### Environment-Specific Configurations + +#### Production Environment +- Use production database +- Enable SSL/HTTPS +- Configure CDN for assets +- Set up monitoring and alerts +- Enable backup strategies + +#### Staging Environment +- Use staging database +- Enable detailed logging +- Test payment integrations +- Validate third-party APIs + +## 🎨 Customization Guide + +### Theme Customization + +The design uses a sophisticated color palette that can be easily customized: + +```javascript +// client/src/theme.js +const theme = createTheme({ + palette: { + primary: { + main: '#8B4513', // Change to your brand color + }, + secondary: { + main: '#D4AF37', // Change accent color + }, + }, +}); +``` + +### Logo Integration + +1. Replace logo files in `client/public/` +2. Update logo references in Header component +3. Adjust sizing and positioning as needed + +### Content Management + +- Room information: Update `server/models/Room.js` +- Hotel details: Modify `server/routes/contact.js` +- Translations: Edit files in `client/src/locales/` + +### Email Templates + +Customize email templates in `server/utils/sendEmail.js`: +- Booking confirmations +- Cancellation notifications +- Newsletter templates +- Contact form responses + +## 🧪 Testing + +### Running Tests + +```bash +# Backend tests +cd server +npm test + +# Frontend tests +cd client +npm test +``` + +### Test Coverage + +- Unit tests for models and utilities +- Integration tests for API endpoints +- End-to-end tests for booking flow +- Payment integration testing + +## 📈 Monitoring & Analytics + +### Application Monitoring + +- Winston logging for error tracking +- Performance metrics collection +- Health check endpoints +- Integration status monitoring + +### Business Analytics + +- Booking conversion tracking +- Revenue analytics +- Guest behavior insights +- Platform performance comparison + +## 🆘 Troubleshooting + +### Common Issues + +#### Database Connection Issues +```bash +# Check MongoDB status +sudo systemctl status mongod + +# Restart if needed +sudo systemctl restart mongod +``` + +#### Payment Processing Errors +- Verify Stripe API keys +- Check webhook configurations +- Validate test card numbers + +#### Integration Failures +- Test API credentials +- Check network connectivity +- Verify webhook endpoints + +### Getting Help + +- Check logs in `server/logs/` +- Review API responses +- Test with curl commands +- Contact support team + +## 🔄 Maintenance + +### Regular Updates + +- Update dependencies monthly +- Review security patches +- Monitor API changes +- Backup database regularly + +### Performance Monitoring + +- Database query optimization +- API response times +- Error rate tracking +- User experience metrics + +## 📞 Support + +For technical support and questions: + +- **Documentation**: Check this README and code comments +- **Issues**: Create GitHub issues for bugs +- **Features**: Submit feature requests +- **General**: Contact the development team + +## 📄 License + +This project is licensed under the MIT License - see the LICENSE file for details. + +--- + +**Developed by MiniMax Agent** - A comprehensive hotel management solution designed for modern hospitality businesses. + +*Experience luxury and elegance with The Old Vine Hotel - where technology meets hospitality.* \ No newline at end of file diff --git a/STATIC_WEBSITE_STRUCTURE.md b/STATIC_WEBSITE_STRUCTURE.md new file mode 100644 index 0000000..27408fb --- /dev/null +++ b/STATIC_WEBSITE_STRUCTURE.md @@ -0,0 +1,213 @@ +# 📁 Static Website Structure Analysis + +## 🌐 Deployed Structure on Server + +``` +/public_html/ +│ +├── 📄 index.html (4 KB) +│ └── Single Page Application entry point +│ └── Loads React app from /static/js/main.*.js +│ +├── 📁 static/ (7 MB) +│ ├── css/ +│ │ ├── main.b6834280.css (392 KB - All styles) +│ │ └── main.b6834280.css.map +│ └── js/ +│ ├── main.49960f27.js (392 KB - All React code) +│ ├── main.49960f27.js.map +│ └── main.49960f27.js.LICENSE.txt +│ +├── 📁 images/ (1.8 GB - All static images) +│ ├── logo.png +│ ├── hero.jpg +│ ├── about-hero.jpg +│ ├── about.jpg +│ ├── room-deluxe.jpg +│ ├── room-executive.jpg +│ ├── room-presidential.jpg +│ ├── gallery/ +│ │ ├── 01.jpg through 12.jpg +│ │ ├── hotel-gallery/ (31 images: 01.jpg - 31.jpg) +│ │ └── restaurant-gallery/ (31 images: 01.jpg - 31.jpg) +│ └── rooms/ +│ ├── single-room/ (13 images: 01.jpg - 13.jpg) +│ ├── double-room/ (33 images: 01.jpg - 33.jpg) +│ ├── suite-room/ (13 images: 01.jpg - 13.jpg) +│ ├── twin-room/ (2 images: 01.jpg - 02.jpg) +│ ├── deluxe/ (3 images) +│ ├── executive/ (3 images) +│ └── presidential/ (4 images) +│ +├── 📄 manifest.json (PWA manifest) +├── 📄 asset-manifest.json (Build manifest) +├── 📄 .htaccess (SPA routing rules) +└── 📁 uploads/ (empty - for CMS uploads) +``` + +## 🔧 How It Works + +### 1. Single Page Application (SPA) +- **Entry Point**: `index.html` loads a single React application +- **Routing**: All routes handled client-side by React Router +- **No Server-Side Rendering**: Everything rendered in browser + +### 2. Client-Side Routing +- `.htaccess` redirects all requests to `index.html` +- React Router handles navigation +- Browser history API manages URLs + +### 3. API Dependencies +The frontend makes API calls to: `http://118.139.176.130:5080` + +**API Endpoints Used:** +- `/api/content/home` - Homepage content +- `/api/content/about` - About page content +- `/api/room-categories` - List of room categories +- `/api/room-categories/:slug` - Specific category details +- `/api/rooms` - Individual rooms +- `/api/gallery-categories` - Gallery categories +- `/api/gallery-categories/:slug` - Specific gallery +- `/api/contact/info` - Contact information +- `/api/contact` - Submit contact form +- `/api/bookings` - Booking operations +- `/api/admin/*` - CMS/admin endpoints + +## 📋 Pages/Routes (Client-Side) + +### Public Routes +- `/` - Homepage +- `/about` - About page +- `/rooms` - Room categories listing +- `/rooms/category/:slug` - Category gallery (e.g., `/rooms/category/single-room`) +- `/rooms/:id` - Individual room details +- `/gallery` - Gallery categories +- `/gallery/:slug` - Gallery category view +- `/facilities` - Facilities page +- `/contact` - Contact page +- `/booking` - Booking form +- `/booking/confirmation` - Booking confirmation + +### Admin Routes (Protected) +- `/admin/login` - Admin login +- `/admin/dashboard` - Admin dashboard +- `/admin/content` - Content management +- `/admin/rooms` - Room management +- `/admin/bookings` - Booking management +- `/admin/blog` - Blog management +- `/admin/media` - Media management +- `/admin/settings` - Settings management + +## ⚠️ Current Dependencies + +### ✅ Static (Works Without Backend) +- HTML structure and layout +- CSS styling and animations +- Image display (all images are static files) +- Basic navigation and routing +- UI components rendering + +### ❌ Dynamic (Requires Backend API) +- **Homepage**: Hero content, welcome section, room categories +- **About Page**: Heritage section, mission, vision, values +- **Rooms Page**: Category cards, room details +- **Gallery**: Category listings and images +- **Contact**: Contact form submission +- **Booking**: Booking functionality +- **CMS**: All admin panel features + +## 📊 File Sizes + +- **Total Build Size**: ~1.8 GB + - `index.html`: 4 KB + - `static/`: 7 MB (CSS + JS) + - `images/`: 1.8 GB (all images) + - Other files: < 10 KB + +## 🔄 Build Process + +1. **Source Code** (`client/src/`) → React components +2. **Build** (`npm run build`) → Bundled and minified +3. **Output** (`client/build/`) → Static files ready for deployment +4. **Deploy** → Upload to `public_html/` on server + +## 💡 Options for Deployment + +### Option 1: Fully Static (No Backend) +**Pros:** +- No server required +- Fast loading +- Simple hosting + +**Cons:** +- No dynamic content +- No CMS +- No booking functionality +- Requires rebuild to update content + +**How:** +- Pre-render all pages at build time +- Generate static HTML files +- Embed data in JavaScript bundle + +### Option 2: Hybrid (Current Setup) +**Pros:** +- Full functionality +- Dynamic content +- CMS available +- Easy content updates + +**Cons:** +- Requires backend server +- More complex setup +- Higher hosting costs + +**How:** +- Static frontend + Dynamic backend API +- API handles all data operations + +### Option 3: Static with Pre-rendered Data +**Pros:** +- No API needed +- Fast performance +- Works on static hosting + +**Cons:** +- Content updates require rebuild +- No real-time updates +- Limited interactivity + +**How:** +- Fetch data at build time +- Embed in JavaScript bundle +- Rebuild when content changes + +## 🎯 Current Status + +**Deployed:** +- ✅ Frontend static files on server +- ✅ All images uploaded +- ✅ Routing configured (.htaccess) + +**Missing:** +- ❌ Backend API not accessible (MongoDB issue) +- ❌ Port 5080 may be blocked +- ❌ Dynamic content not loading + +## 📝 Recommendations + +1. **For Static-Only Deployment:** + - Pre-render pages with static data + - Remove API dependencies + - Simplify to brochure site + +2. **For Full Functionality:** + - Fix MongoDB connection (Atlas recommended) + - Configure firewall for port 5080 + - Set up reverse proxy if needed + +3. **For Hybrid Approach:** + - Keep static frontend + - Use serverless functions for API + - Reduce backend complexity + diff --git a/client/build/.htaccess b/client/build/.htaccess new file mode 100644 index 0000000..4e77233 --- /dev/null +++ b/client/build/.htaccess @@ -0,0 +1,9 @@ + + RewriteEngine On + RewriteBase / + RewriteRule ^index\.html$ - [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule . /index.html [L] + + diff --git a/client/build/asset-manifest.json b/client/build/asset-manifest.json new file mode 100644 index 0000000..5ced615 --- /dev/null +++ b/client/build/asset-manifest.json @@ -0,0 +1,13 @@ +{ + "files": { + "main.css": "/static/css/main.d82e9c4b.css", + "main.js": "/static/js/main.38102cbe.js", + "index.html": "/index.html", + "main.d82e9c4b.css.map": "/static/css/main.d82e9c4b.css.map", + "main.38102cbe.js.map": "/static/js/main.38102cbe.js.map" + }, + "entrypoints": [ + "static/css/main.d82e9c4b.css", + "static/js/main.38102cbe.js" + ] +} \ No newline at end of file diff --git a/client/build/images/0A3A8962_Easy-Resize.com.jpg b/client/build/images/0A3A8962_Easy-Resize.com.jpg new file mode 100644 index 0000000..40043a3 Binary files /dev/null and b/client/build/images/0A3A8962_Easy-Resize.com.jpg differ diff --git a/client/build/images/0A3A9475_Easy-Resize.com.jpg b/client/build/images/0A3A9475_Easy-Resize.com.jpg new file mode 100644 index 0000000..3f3fe0a Binary files /dev/null and b/client/build/images/0A3A9475_Easy-Resize.com.jpg differ diff --git a/client/build/images/about-hero.jpg b/client/build/images/about-hero.jpg new file mode 100644 index 0000000..6407c5a Binary files /dev/null and b/client/build/images/about-hero.jpg differ diff --git a/client/build/images/about.jpg b/client/build/images/about.jpg new file mode 100644 index 0000000..00cab94 Binary files /dev/null and b/client/build/images/about.jpg differ diff --git a/client/build/images/gallery/01.jpg b/client/build/images/gallery/01.jpg new file mode 100644 index 0000000..8f477f1 Binary files /dev/null and b/client/build/images/gallery/01.jpg differ diff --git a/client/build/images/gallery/02.jpg b/client/build/images/gallery/02.jpg new file mode 100644 index 0000000..3b84bc2 Binary files /dev/null and b/client/build/images/gallery/02.jpg differ diff --git a/client/build/images/gallery/03.jpg b/client/build/images/gallery/03.jpg new file mode 100644 index 0000000..a234a8c Binary files /dev/null and b/client/build/images/gallery/03.jpg differ diff --git a/client/build/images/gallery/04.jpg b/client/build/images/gallery/04.jpg new file mode 100644 index 0000000..55a3b62 Binary files /dev/null and b/client/build/images/gallery/04.jpg differ diff --git a/client/build/images/gallery/05.jpg b/client/build/images/gallery/05.jpg new file mode 100644 index 0000000..0069f90 Binary files /dev/null and b/client/build/images/gallery/05.jpg differ diff --git a/client/build/images/gallery/06.jpg b/client/build/images/gallery/06.jpg new file mode 100644 index 0000000..c8b8caf Binary files /dev/null and b/client/build/images/gallery/06.jpg differ diff --git a/client/build/images/gallery/07.jpg b/client/build/images/gallery/07.jpg new file mode 100644 index 0000000..9d3478f Binary files /dev/null and b/client/build/images/gallery/07.jpg differ diff --git a/client/build/images/gallery/08.jpg b/client/build/images/gallery/08.jpg new file mode 100644 index 0000000..2743ddf Binary files /dev/null and b/client/build/images/gallery/08.jpg differ diff --git a/client/build/images/gallery/09.jpg b/client/build/images/gallery/09.jpg new file mode 100644 index 0000000..50fea08 Binary files /dev/null and b/client/build/images/gallery/09.jpg differ diff --git a/client/build/images/gallery/10.jpg b/client/build/images/gallery/10.jpg new file mode 100644 index 0000000..b50b3a0 Binary files /dev/null and b/client/build/images/gallery/10.jpg differ diff --git a/client/build/images/gallery/11.jpg b/client/build/images/gallery/11.jpg new file mode 100644 index 0000000..f19764b Binary files /dev/null and b/client/build/images/gallery/11.jpg differ diff --git a/client/build/images/gallery/12.jpg b/client/build/images/gallery/12.jpg new file mode 100644 index 0000000..e21089a Binary files /dev/null and b/client/build/images/gallery/12.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/01.jpg b/client/build/images/gallery/hotel-gallery/01.jpg new file mode 100644 index 0000000..a17175c Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/01.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/02.jpg b/client/build/images/gallery/hotel-gallery/02.jpg new file mode 100644 index 0000000..e48e1fb Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/02.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/03.jpg b/client/build/images/gallery/hotel-gallery/03.jpg new file mode 100644 index 0000000..d0a1489 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/03.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/04.jpg b/client/build/images/gallery/hotel-gallery/04.jpg new file mode 100644 index 0000000..896e682 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/04.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/05.jpg b/client/build/images/gallery/hotel-gallery/05.jpg new file mode 100644 index 0000000..b4a7005 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/05.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/06.jpg b/client/build/images/gallery/hotel-gallery/06.jpg new file mode 100644 index 0000000..89180b7 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/06.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/07.jpg b/client/build/images/gallery/hotel-gallery/07.jpg new file mode 100644 index 0000000..fe7e5c6 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/07.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/08.jpg b/client/build/images/gallery/hotel-gallery/08.jpg new file mode 100644 index 0000000..7966756 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/08.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/09.jpg b/client/build/images/gallery/hotel-gallery/09.jpg new file mode 100644 index 0000000..4795300 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/09.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/10.jpg b/client/build/images/gallery/hotel-gallery/10.jpg new file mode 100644 index 0000000..bee32c7 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/10.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/11.jpg b/client/build/images/gallery/hotel-gallery/11.jpg new file mode 100644 index 0000000..12809a5 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/11.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/12.jpg b/client/build/images/gallery/hotel-gallery/12.jpg new file mode 100644 index 0000000..77043c3 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/12.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/13.jpg b/client/build/images/gallery/hotel-gallery/13.jpg new file mode 100644 index 0000000..ca81b6b Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/13.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/14.jpg b/client/build/images/gallery/hotel-gallery/14.jpg new file mode 100644 index 0000000..cfbe0b0 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/14.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/15.jpg b/client/build/images/gallery/hotel-gallery/15.jpg new file mode 100644 index 0000000..8a62a2d Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/15.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/16.jpg b/client/build/images/gallery/hotel-gallery/16.jpg new file mode 100644 index 0000000..afe89d2 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/16.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/17.jpg b/client/build/images/gallery/hotel-gallery/17.jpg new file mode 100644 index 0000000..ffb450e Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/17.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/18.jpg b/client/build/images/gallery/hotel-gallery/18.jpg new file mode 100644 index 0000000..109293d Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/18.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/19.jpg b/client/build/images/gallery/hotel-gallery/19.jpg new file mode 100644 index 0000000..ca424c2 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/19.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/20.jpg b/client/build/images/gallery/hotel-gallery/20.jpg new file mode 100644 index 0000000..7eee6eb Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/20.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/21.jpg b/client/build/images/gallery/hotel-gallery/21.jpg new file mode 100644 index 0000000..88646be Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/21.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/22.jpg b/client/build/images/gallery/hotel-gallery/22.jpg new file mode 100644 index 0000000..793e4b1 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/22.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/23.jpg b/client/build/images/gallery/hotel-gallery/23.jpg new file mode 100644 index 0000000..00f12fd Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/23.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/24.jpg b/client/build/images/gallery/hotel-gallery/24.jpg new file mode 100644 index 0000000..8a58cbe Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/24.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/25.jpg b/client/build/images/gallery/hotel-gallery/25.jpg new file mode 100644 index 0000000..f92d227 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/25.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/26.jpg b/client/build/images/gallery/hotel-gallery/26.jpg new file mode 100644 index 0000000..eb1155d Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/26.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/27.jpg b/client/build/images/gallery/hotel-gallery/27.jpg new file mode 100644 index 0000000..01f5943 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/27.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/28.jpg b/client/build/images/gallery/hotel-gallery/28.jpg new file mode 100644 index 0000000..20022e2 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/28.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/29.jpg b/client/build/images/gallery/hotel-gallery/29.jpg new file mode 100644 index 0000000..87f7012 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/29.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/30.jpg b/client/build/images/gallery/hotel-gallery/30.jpg new file mode 100644 index 0000000..0006a06 Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/30.jpg differ diff --git a/client/build/images/gallery/hotel-gallery/31.jpg b/client/build/images/gallery/hotel-gallery/31.jpg new file mode 100644 index 0000000..7cb5bfb Binary files /dev/null and b/client/build/images/gallery/hotel-gallery/31.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/01.jpg b/client/build/images/gallery/restaurant-gallery/01.jpg new file mode 100644 index 0000000..9bed08f Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/01.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/02.jpg b/client/build/images/gallery/restaurant-gallery/02.jpg new file mode 100644 index 0000000..99ba0ba Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/02.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/03.jpg b/client/build/images/gallery/restaurant-gallery/03.jpg new file mode 100644 index 0000000..8f51a79 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/03.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/04.jpg b/client/build/images/gallery/restaurant-gallery/04.jpg new file mode 100644 index 0000000..52ef893 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/04.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/05.jpg b/client/build/images/gallery/restaurant-gallery/05.jpg new file mode 100644 index 0000000..486bf58 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/05.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/06.jpg b/client/build/images/gallery/restaurant-gallery/06.jpg new file mode 100644 index 0000000..4da2fad Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/06.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/07.jpg b/client/build/images/gallery/restaurant-gallery/07.jpg new file mode 100644 index 0000000..bb0960d Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/07.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/08.jpg b/client/build/images/gallery/restaurant-gallery/08.jpg new file mode 100644 index 0000000..fa4fb44 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/08.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/09.jpg b/client/build/images/gallery/restaurant-gallery/09.jpg new file mode 100644 index 0000000..707e1af Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/09.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/10.jpg b/client/build/images/gallery/restaurant-gallery/10.jpg new file mode 100644 index 0000000..3ec3b3a Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/10.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/11.jpg b/client/build/images/gallery/restaurant-gallery/11.jpg new file mode 100644 index 0000000..02b4e4c Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/11.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/12.jpg b/client/build/images/gallery/restaurant-gallery/12.jpg new file mode 100644 index 0000000..10c2619 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/12.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/13.jpg b/client/build/images/gallery/restaurant-gallery/13.jpg new file mode 100644 index 0000000..7187560 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/13.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/14.jpg b/client/build/images/gallery/restaurant-gallery/14.jpg new file mode 100644 index 0000000..6993fca Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/14.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/15.jpg b/client/build/images/gallery/restaurant-gallery/15.jpg new file mode 100644 index 0000000..aebcddd Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/15.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/16.jpg b/client/build/images/gallery/restaurant-gallery/16.jpg new file mode 100644 index 0000000..d8f17cf Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/16.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/17.jpg b/client/build/images/gallery/restaurant-gallery/17.jpg new file mode 100644 index 0000000..30eb5c3 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/17.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/18.jpg b/client/build/images/gallery/restaurant-gallery/18.jpg new file mode 100644 index 0000000..5cd1906 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/18.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/19.jpg b/client/build/images/gallery/restaurant-gallery/19.jpg new file mode 100644 index 0000000..db1d27a Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/19.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/20.jpg b/client/build/images/gallery/restaurant-gallery/20.jpg new file mode 100644 index 0000000..a501cb9 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/20.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/21.jpg b/client/build/images/gallery/restaurant-gallery/21.jpg new file mode 100644 index 0000000..e505684 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/21.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/22.jpg b/client/build/images/gallery/restaurant-gallery/22.jpg new file mode 100644 index 0000000..ead8457 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/22.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/23.jpg b/client/build/images/gallery/restaurant-gallery/23.jpg new file mode 100644 index 0000000..792235e Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/23.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/24.jpg b/client/build/images/gallery/restaurant-gallery/24.jpg new file mode 100644 index 0000000..dbc31b2 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/24.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/25.jpg b/client/build/images/gallery/restaurant-gallery/25.jpg new file mode 100644 index 0000000..d114ba0 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/25.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/26.jpg b/client/build/images/gallery/restaurant-gallery/26.jpg new file mode 100644 index 0000000..657ab4c Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/26.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/27.jpg b/client/build/images/gallery/restaurant-gallery/27.jpg new file mode 100644 index 0000000..5a60935 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/27.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/28.jpg b/client/build/images/gallery/restaurant-gallery/28.jpg new file mode 100644 index 0000000..66ab83b Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/28.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/29.jpg b/client/build/images/gallery/restaurant-gallery/29.jpg new file mode 100644 index 0000000..d25c49b Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/29.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/30.jpg b/client/build/images/gallery/restaurant-gallery/30.jpg new file mode 100644 index 0000000..9886072 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/30.jpg differ diff --git a/client/build/images/gallery/restaurant-gallery/31.jpg b/client/build/images/gallery/restaurant-gallery/31.jpg new file mode 100644 index 0000000..4974231 Binary files /dev/null and b/client/build/images/gallery/restaurant-gallery/31.jpg differ diff --git a/client/build/images/hero.jpg b/client/build/images/hero.jpg new file mode 100644 index 0000000..be25975 Binary files /dev/null and b/client/build/images/hero.jpg differ diff --git a/client/build/images/logo.png b/client/build/images/logo.png new file mode 100644 index 0000000..e198825 Binary files /dev/null and b/client/build/images/logo.png differ diff --git a/client/build/images/room-deluxe.jpg b/client/build/images/room-deluxe.jpg new file mode 100644 index 0000000..3c62ae2 Binary files /dev/null and b/client/build/images/room-deluxe.jpg differ diff --git a/client/build/images/room-executive.jpg b/client/build/images/room-executive.jpg new file mode 100644 index 0000000..e8da80b Binary files /dev/null and b/client/build/images/room-executive.jpg differ diff --git a/client/build/images/room-presidential.jpg b/client/build/images/room-presidential.jpg new file mode 100644 index 0000000..50b68e3 Binary files /dev/null and b/client/build/images/room-presidential.jpg differ diff --git a/client/build/images/rooms/deluxe/01.jpg b/client/build/images/rooms/deluxe/01.jpg new file mode 100644 index 0000000..ba3d71b Binary files /dev/null and b/client/build/images/rooms/deluxe/01.jpg differ diff --git a/client/build/images/rooms/deluxe/02.jpg b/client/build/images/rooms/deluxe/02.jpg new file mode 100644 index 0000000..b81b2a7 Binary files /dev/null and b/client/build/images/rooms/deluxe/02.jpg differ diff --git a/client/build/images/rooms/deluxe/03.jpg b/client/build/images/rooms/deluxe/03.jpg new file mode 100644 index 0000000..1d78c74 Binary files /dev/null and b/client/build/images/rooms/deluxe/03.jpg differ diff --git a/client/build/images/rooms/double-room/01.jpg b/client/build/images/rooms/double-room/01.jpg new file mode 100644 index 0000000..2253603 Binary files /dev/null and b/client/build/images/rooms/double-room/01.jpg differ diff --git a/client/build/images/rooms/double-room/02.jpg b/client/build/images/rooms/double-room/02.jpg new file mode 100644 index 0000000..f26023a Binary files /dev/null and b/client/build/images/rooms/double-room/02.jpg differ diff --git a/client/build/images/rooms/double-room/03.jpg b/client/build/images/rooms/double-room/03.jpg new file mode 100644 index 0000000..df349f9 Binary files /dev/null and b/client/build/images/rooms/double-room/03.jpg differ diff --git a/client/build/images/rooms/double-room/04.jpg b/client/build/images/rooms/double-room/04.jpg new file mode 100644 index 0000000..90f7528 Binary files /dev/null and b/client/build/images/rooms/double-room/04.jpg differ diff --git a/client/build/images/rooms/double-room/05.jpg b/client/build/images/rooms/double-room/05.jpg new file mode 100644 index 0000000..ba11664 Binary files /dev/null and b/client/build/images/rooms/double-room/05.jpg differ diff --git a/client/build/images/rooms/double-room/06.jpg b/client/build/images/rooms/double-room/06.jpg new file mode 100644 index 0000000..be5d31f Binary files /dev/null and b/client/build/images/rooms/double-room/06.jpg differ diff --git a/client/build/images/rooms/double-room/07.jpg b/client/build/images/rooms/double-room/07.jpg new file mode 100644 index 0000000..8da501d Binary files /dev/null and b/client/build/images/rooms/double-room/07.jpg differ diff --git a/client/build/images/rooms/double-room/08.jpg b/client/build/images/rooms/double-room/08.jpg new file mode 100644 index 0000000..d6fe94f Binary files /dev/null and b/client/build/images/rooms/double-room/08.jpg differ diff --git a/client/build/images/rooms/double-room/09.jpg b/client/build/images/rooms/double-room/09.jpg new file mode 100644 index 0000000..b571387 Binary files /dev/null and b/client/build/images/rooms/double-room/09.jpg differ diff --git a/client/build/images/rooms/double-room/10.jpg b/client/build/images/rooms/double-room/10.jpg new file mode 100644 index 0000000..efd5d96 Binary files /dev/null and b/client/build/images/rooms/double-room/10.jpg differ diff --git a/client/build/images/rooms/double-room/11.jpg b/client/build/images/rooms/double-room/11.jpg new file mode 100644 index 0000000..e6d4a3e Binary files /dev/null and b/client/build/images/rooms/double-room/11.jpg differ diff --git a/client/build/images/rooms/double-room/12.jpg b/client/build/images/rooms/double-room/12.jpg new file mode 100644 index 0000000..8c14693 Binary files /dev/null and b/client/build/images/rooms/double-room/12.jpg differ diff --git a/client/build/images/rooms/double-room/13.jpg b/client/build/images/rooms/double-room/13.jpg new file mode 100644 index 0000000..f96dd6d Binary files /dev/null and b/client/build/images/rooms/double-room/13.jpg differ diff --git a/client/build/images/rooms/double-room/14.jpg b/client/build/images/rooms/double-room/14.jpg new file mode 100644 index 0000000..d7d93f1 Binary files /dev/null and b/client/build/images/rooms/double-room/14.jpg differ diff --git a/client/build/images/rooms/double-room/15.jpg b/client/build/images/rooms/double-room/15.jpg new file mode 100644 index 0000000..583c99a Binary files /dev/null and b/client/build/images/rooms/double-room/15.jpg differ diff --git a/client/build/images/rooms/double-room/16.jpg b/client/build/images/rooms/double-room/16.jpg new file mode 100644 index 0000000..a464b43 Binary files /dev/null and b/client/build/images/rooms/double-room/16.jpg differ diff --git a/client/build/images/rooms/double-room/17.jpg b/client/build/images/rooms/double-room/17.jpg new file mode 100644 index 0000000..13e73cb Binary files /dev/null and b/client/build/images/rooms/double-room/17.jpg differ diff --git a/client/build/images/rooms/double-room/18.jpg b/client/build/images/rooms/double-room/18.jpg new file mode 100644 index 0000000..8840df0 Binary files /dev/null and b/client/build/images/rooms/double-room/18.jpg differ diff --git a/client/build/images/rooms/double-room/19.jpg b/client/build/images/rooms/double-room/19.jpg new file mode 100644 index 0000000..6a5cf7e Binary files /dev/null and b/client/build/images/rooms/double-room/19.jpg differ diff --git a/client/build/images/rooms/double-room/20.jpg b/client/build/images/rooms/double-room/20.jpg new file mode 100644 index 0000000..751f5b9 Binary files /dev/null and b/client/build/images/rooms/double-room/20.jpg differ diff --git a/client/build/images/rooms/double-room/21.jpg b/client/build/images/rooms/double-room/21.jpg new file mode 100644 index 0000000..ba48853 Binary files /dev/null and b/client/build/images/rooms/double-room/21.jpg differ diff --git a/client/build/images/rooms/double-room/22.jpg b/client/build/images/rooms/double-room/22.jpg new file mode 100644 index 0000000..6d76993 Binary files /dev/null and b/client/build/images/rooms/double-room/22.jpg differ diff --git a/client/build/images/rooms/double-room/23.jpg b/client/build/images/rooms/double-room/23.jpg new file mode 100644 index 0000000..6dac567 Binary files /dev/null and b/client/build/images/rooms/double-room/23.jpg differ diff --git a/client/build/images/rooms/double-room/24.jpg b/client/build/images/rooms/double-room/24.jpg new file mode 100644 index 0000000..f48bebc Binary files /dev/null and b/client/build/images/rooms/double-room/24.jpg differ diff --git a/client/build/images/rooms/double-room/25.jpg b/client/build/images/rooms/double-room/25.jpg new file mode 100644 index 0000000..bcbc2c0 Binary files /dev/null and b/client/build/images/rooms/double-room/25.jpg differ diff --git a/client/build/images/rooms/double-room/26.jpg b/client/build/images/rooms/double-room/26.jpg new file mode 100644 index 0000000..86a364b Binary files /dev/null and b/client/build/images/rooms/double-room/26.jpg differ diff --git a/client/build/images/rooms/double-room/27.jpg b/client/build/images/rooms/double-room/27.jpg new file mode 100644 index 0000000..94a9e50 Binary files /dev/null and b/client/build/images/rooms/double-room/27.jpg differ diff --git a/client/build/images/rooms/double-room/28.jpg b/client/build/images/rooms/double-room/28.jpg new file mode 100644 index 0000000..b676704 Binary files /dev/null and b/client/build/images/rooms/double-room/28.jpg differ diff --git a/client/build/images/rooms/double-room/29.jpg b/client/build/images/rooms/double-room/29.jpg new file mode 100644 index 0000000..fedcefe Binary files /dev/null and b/client/build/images/rooms/double-room/29.jpg differ diff --git a/client/build/images/rooms/double-room/30.jpg b/client/build/images/rooms/double-room/30.jpg new file mode 100644 index 0000000..db8d040 Binary files /dev/null and b/client/build/images/rooms/double-room/30.jpg differ diff --git a/client/build/images/rooms/double-room/31.jpg b/client/build/images/rooms/double-room/31.jpg new file mode 100644 index 0000000..cfe323c Binary files /dev/null and b/client/build/images/rooms/double-room/31.jpg differ diff --git a/client/build/images/rooms/double-room/32.jpg b/client/build/images/rooms/double-room/32.jpg new file mode 100644 index 0000000..c16d3ab Binary files /dev/null and b/client/build/images/rooms/double-room/32.jpg differ diff --git a/client/build/images/rooms/double-room/33.jpg b/client/build/images/rooms/double-room/33.jpg new file mode 100644 index 0000000..56eceb5 Binary files /dev/null and b/client/build/images/rooms/double-room/33.jpg differ diff --git a/client/build/images/rooms/executive/01.jpg b/client/build/images/rooms/executive/01.jpg new file mode 100644 index 0000000..6b0ee4f Binary files /dev/null and b/client/build/images/rooms/executive/01.jpg differ diff --git a/client/build/images/rooms/executive/02.jpg b/client/build/images/rooms/executive/02.jpg new file mode 100644 index 0000000..0480912 Binary files /dev/null and b/client/build/images/rooms/executive/02.jpg differ diff --git a/client/build/images/rooms/executive/03.jpg b/client/build/images/rooms/executive/03.jpg new file mode 100644 index 0000000..e8da80b Binary files /dev/null and b/client/build/images/rooms/executive/03.jpg differ diff --git a/client/build/images/rooms/presidential/01.jpg b/client/build/images/rooms/presidential/01.jpg new file mode 100644 index 0000000..50b68e3 Binary files /dev/null and b/client/build/images/rooms/presidential/01.jpg differ diff --git a/client/build/images/rooms/presidential/02.jpg b/client/build/images/rooms/presidential/02.jpg new file mode 100644 index 0000000..f34edb0 Binary files /dev/null and b/client/build/images/rooms/presidential/02.jpg differ diff --git a/client/build/images/rooms/presidential/03.jpg b/client/build/images/rooms/presidential/03.jpg new file mode 100644 index 0000000..8888767 Binary files /dev/null and b/client/build/images/rooms/presidential/03.jpg differ diff --git a/client/build/images/rooms/presidential/04.jpg b/client/build/images/rooms/presidential/04.jpg new file mode 100644 index 0000000..9536659 Binary files /dev/null and b/client/build/images/rooms/presidential/04.jpg differ diff --git a/client/build/images/rooms/single-room/01.jpg b/client/build/images/rooms/single-room/01.jpg new file mode 100644 index 0000000..4642a36 Binary files /dev/null and b/client/build/images/rooms/single-room/01.jpg differ diff --git a/client/build/images/rooms/single-room/02.jpg b/client/build/images/rooms/single-room/02.jpg new file mode 100644 index 0000000..79fa1fc Binary files /dev/null and b/client/build/images/rooms/single-room/02.jpg differ diff --git a/client/build/images/rooms/single-room/03.jpg b/client/build/images/rooms/single-room/03.jpg new file mode 100644 index 0000000..0eebd59 Binary files /dev/null and b/client/build/images/rooms/single-room/03.jpg differ diff --git a/client/build/images/rooms/single-room/04.jpg b/client/build/images/rooms/single-room/04.jpg new file mode 100644 index 0000000..f26023a Binary files /dev/null and b/client/build/images/rooms/single-room/04.jpg differ diff --git a/client/build/images/rooms/single-room/05.jpg b/client/build/images/rooms/single-room/05.jpg new file mode 100644 index 0000000..7f2c7c8 Binary files /dev/null and b/client/build/images/rooms/single-room/05.jpg differ diff --git a/client/build/images/rooms/single-room/06.jpg b/client/build/images/rooms/single-room/06.jpg new file mode 100644 index 0000000..c009b3a Binary files /dev/null and b/client/build/images/rooms/single-room/06.jpg differ diff --git a/client/build/images/rooms/single-room/07.jpg b/client/build/images/rooms/single-room/07.jpg new file mode 100644 index 0000000..5543ebf Binary files /dev/null and b/client/build/images/rooms/single-room/07.jpg differ diff --git a/client/build/images/rooms/single-room/08.jpg b/client/build/images/rooms/single-room/08.jpg new file mode 100644 index 0000000..1ebf23a Binary files /dev/null and b/client/build/images/rooms/single-room/08.jpg differ diff --git a/client/build/images/rooms/single-room/09.jpg b/client/build/images/rooms/single-room/09.jpg new file mode 100644 index 0000000..45f1872 Binary files /dev/null and b/client/build/images/rooms/single-room/09.jpg differ diff --git a/client/build/images/rooms/single-room/10.jpg b/client/build/images/rooms/single-room/10.jpg new file mode 100644 index 0000000..a80346f Binary files /dev/null and b/client/build/images/rooms/single-room/10.jpg differ diff --git a/client/build/images/rooms/single-room/11.jpg b/client/build/images/rooms/single-room/11.jpg new file mode 100644 index 0000000..be5d31f Binary files /dev/null and b/client/build/images/rooms/single-room/11.jpg differ diff --git a/client/build/images/rooms/single-room/12.jpg b/client/build/images/rooms/single-room/12.jpg new file mode 100644 index 0000000..6dac567 Binary files /dev/null and b/client/build/images/rooms/single-room/12.jpg differ diff --git a/client/build/images/rooms/single-room/13.jpg b/client/build/images/rooms/single-room/13.jpg new file mode 100644 index 0000000..f20860d Binary files /dev/null and b/client/build/images/rooms/single-room/13.jpg differ diff --git a/client/build/images/rooms/suite-room/01.jpg b/client/build/images/rooms/suite-room/01.jpg new file mode 100644 index 0000000..807c695 Binary files /dev/null and b/client/build/images/rooms/suite-room/01.jpg differ diff --git a/client/build/images/rooms/suite-room/02.jpg b/client/build/images/rooms/suite-room/02.jpg new file mode 100644 index 0000000..cb76902 Binary files /dev/null and b/client/build/images/rooms/suite-room/02.jpg differ diff --git a/client/build/images/rooms/suite-room/03.jpg b/client/build/images/rooms/suite-room/03.jpg new file mode 100644 index 0000000..b656553 Binary files /dev/null and b/client/build/images/rooms/suite-room/03.jpg differ diff --git a/client/build/images/rooms/suite-room/04.jpg b/client/build/images/rooms/suite-room/04.jpg new file mode 100644 index 0000000..786ed76 Binary files /dev/null and b/client/build/images/rooms/suite-room/04.jpg differ diff --git a/client/build/images/rooms/suite-room/05.jpg b/client/build/images/rooms/suite-room/05.jpg new file mode 100644 index 0000000..f26023a Binary files /dev/null and b/client/build/images/rooms/suite-room/05.jpg differ diff --git a/client/build/images/rooms/suite-room/06.jpg b/client/build/images/rooms/suite-room/06.jpg new file mode 100644 index 0000000..3c4c66c Binary files /dev/null and b/client/build/images/rooms/suite-room/06.jpg differ diff --git a/client/build/images/rooms/suite-room/07.jpg b/client/build/images/rooms/suite-room/07.jpg new file mode 100644 index 0000000..bb0aae7 Binary files /dev/null and b/client/build/images/rooms/suite-room/07.jpg differ diff --git a/client/build/images/rooms/suite-room/08.jpg b/client/build/images/rooms/suite-room/08.jpg new file mode 100644 index 0000000..529ad75 Binary files /dev/null and b/client/build/images/rooms/suite-room/08.jpg differ diff --git a/client/build/images/rooms/suite-room/09.jpg b/client/build/images/rooms/suite-room/09.jpg new file mode 100644 index 0000000..d9fa87c Binary files /dev/null and b/client/build/images/rooms/suite-room/09.jpg differ diff --git a/client/build/images/rooms/suite-room/10.jpg b/client/build/images/rooms/suite-room/10.jpg new file mode 100644 index 0000000..1e1e0eb Binary files /dev/null and b/client/build/images/rooms/suite-room/10.jpg differ diff --git a/client/build/images/rooms/suite-room/11.jpg b/client/build/images/rooms/suite-room/11.jpg new file mode 100644 index 0000000..4a8a121 Binary files /dev/null and b/client/build/images/rooms/suite-room/11.jpg differ diff --git a/client/build/images/rooms/suite-room/12.jpg b/client/build/images/rooms/suite-room/12.jpg new file mode 100644 index 0000000..cb22d23 Binary files /dev/null and b/client/build/images/rooms/suite-room/12.jpg differ diff --git a/client/build/images/rooms/suite-room/13.jpg b/client/build/images/rooms/suite-room/13.jpg new file mode 100644 index 0000000..6dac567 Binary files /dev/null and b/client/build/images/rooms/suite-room/13.jpg differ diff --git a/client/build/images/rooms/twin-room/01.jpg b/client/build/images/rooms/twin-room/01.jpg new file mode 100644 index 0000000..4aba987 Binary files /dev/null and b/client/build/images/rooms/twin-room/01.jpg differ diff --git a/client/build/images/rooms/twin-room/02.jpg b/client/build/images/rooms/twin-room/02.jpg new file mode 100644 index 0000000..bd50a5e Binary files /dev/null and b/client/build/images/rooms/twin-room/02.jpg differ diff --git a/client/build/index.html b/client/build/index.html new file mode 100644 index 0000000..4d3dfc0 --- /dev/null +++ b/client/build/index.html @@ -0,0 +1 @@ +The Old Vine Hotel - Luxury Accommodation
\ No newline at end of file diff --git a/client/build/manifest.json b/client/build/manifest.json new file mode 100644 index 0000000..16bfe87 --- /dev/null +++ b/client/build/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "Old Vine Hotel", + "name": "The Old Vine Hotel", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#8B4513", + "background_color": "#ffffff" +} \ No newline at end of file diff --git a/client/build/static-data/about-content.json b/client/build/static-data/about-content.json new file mode 100644 index 0000000..beece83 --- /dev/null +++ b/client/build/static-data/about-content.json @@ -0,0 +1 @@ +{"success":true,"data":{"content":{"hero":{"title":"Our Story","subtitle":"A Legacy of Hospitality Since Heritage","description":"Discover the rich history and timeless charm of Old Vine Hotel","backgroundImage":"/images/about-hero.jpg"},"seo":{"title":"About Old Vine Hotel - Our Story and Heritage","description":"Learn about Old Vine Hotel's rich history, mission, and commitment to preserving the cultural heritage of Old Damascus while providing exceptional hospitality.","keywords":["damascus heritage","historic hotel damascus","old damascus architecture"],"ogImage":"/images/about-hero.jpg"},"_id":"6919630dee4710dfb2cafdb1","page":"about","sections":[{"sectionId":"heritage","title":"A Hidden Gem Of Old Damascus","content":"Old Vine Hotel stands as a living piece of history, where centuries-old craftsmanship and modern elegance unite in perfect harmony. the property features three tranquil courtyards, each shaded by climbing vines and fragrant citrus trees, offering guests peaceful spaces to relax and unwind.\n\nFrom the terraces overlooking old Damascus and the new city, the views are simply breathtaking. the majestic Umayyad mosque feels almost within reach, its minarets visible from the terrace—an unforgettable sight that connects you directly to the heart of one of the world's oldest continuously inhabited cities.","isActive":true,"items":[],"_id":"691ac5e8feac3c50a6424e9c","id":"691ac5e8feac3c50a6424e9c"},{"sectionId":"mission","title":"Our Mission","content":"To provide an authentic Damascus experience that honors our cultural heritage while delivering world-class hospitality. We believe in creating meaningful connections between our guests and the rich tapestry of Syrian culture, history, and tradition.","order":2,"isActive":true,"items":[],"layout":"left-image","_id":"6919630dee4710dfb2cafdb3","id":"6919630dee4710dfb2cafdb3"},{"sectionId":"vision","title":"Our Vision","content":"To be the premier destination for travelers seeking an authentic cultural experience in Damascus. We strive to preserve and share the beauty of Old Damascus while setting new standards in hospitality and guest satisfaction.","order":3,"isActive":true,"items":[],"layout":"full-width","_id":"6919630dee4710dfb2cafdb4","id":"6919630dee4710dfb2cafdb4"},{"sectionId":"values","title":"Our Values","content":"We are guided by principles of excellence, authenticity, and respect for our heritage.","order":4,"isActive":true,"items":[{"title":"Authenticity","description":"Preserving and celebrating Syrian culture and traditions"},{"title":"Excellence","description":"Delivering world-class service and hospitality"},{"title":"Heritage","description":"Honoring the history and architecture of Old Damascus"},{"title":"Innovation","description":"Blending tradition with modern comfort and technology"}],"layout":"full-width","_id":"6919630dee4710dfb2cafdb5","id":"6919630dee4710dfb2cafdb5"}],"version":2,"isPublished":true,"publishedAt":"2025-11-16T05:37:17.786Z","createdAt":"2025-11-16T05:37:17.786Z","updatedAt":"2025-11-17T06:51:20.077Z","__v":0,"id":"6919630dee4710dfb2cafdb1"}}} \ No newline at end of file diff --git a/client/build/static-data/gallery-categories.json b/client/build/static-data/gallery-categories.json new file mode 100644 index 0000000..c006d6c --- /dev/null +++ b/client/build/static-data/gallery-categories.json @@ -0,0 +1 @@ +{"success":true,"data":{"categories":[{"_id":"691e1e6d4b06e94193334c3e","name":"Hotel Gallery","slug":"hotel-gallery","description":"Explore the beautiful interiors, architecture, and spaces of Old Vine Hotel. From elegant rooms to stunning courtyards, discover the charm of our historic property.","shortDescription":"Beautiful interiors, architecture, and spaces of our hotel","images":[{"url":"/images/gallery/hotel-gallery/01.jpg","alt":"Hotel Gallery - Image 1","isPrimary":true,"order":0,"_id":"691e250ca18fb6aad4a032b8"},{"url":"/images/gallery/hotel-gallery/02.jpg","alt":"Hotel Gallery - Image 2","isPrimary":false,"order":1,"_id":"691e250ca18fb6aad4a032b9"},{"url":"/images/gallery/hotel-gallery/03.jpg","alt":"Hotel Gallery - Image 3","isPrimary":false,"order":2,"_id":"691e250ca18fb6aad4a032ba"},{"url":"/images/gallery/hotel-gallery/04.jpg","alt":"Hotel Gallery - Image 4","isPrimary":false,"order":3,"_id":"691e250ca18fb6aad4a032bb"},{"url":"/images/gallery/hotel-gallery/05.jpg","alt":"Hotel Gallery - Image 5","isPrimary":false,"order":4,"_id":"691e250ca18fb6aad4a032bc"},{"url":"/images/gallery/hotel-gallery/06.jpg","alt":"Hotel Gallery - Image 6","isPrimary":false,"order":5,"_id":"691e250ca18fb6aad4a032bd"},{"url":"/images/gallery/hotel-gallery/07.jpg","alt":"Hotel Gallery - Image 7","isPrimary":false,"order":6,"_id":"691e250ca18fb6aad4a032be"},{"url":"/images/gallery/hotel-gallery/08.jpg","alt":"Hotel Gallery - Image 8","isPrimary":false,"order":7,"_id":"691e250ca18fb6aad4a032bf"},{"url":"/images/gallery/hotel-gallery/09.jpg","alt":"Hotel Gallery - Image 9","isPrimary":false,"order":8,"_id":"691e250ca18fb6aad4a032c0"},{"url":"/images/gallery/hotel-gallery/10.jpg","alt":"Hotel Gallery - Image 10","isPrimary":false,"order":9,"_id":"691e250ca18fb6aad4a032c1"},{"url":"/images/gallery/hotel-gallery/11.jpg","alt":"Hotel Gallery - Image 11","isPrimary":false,"order":10,"_id":"691e250ca18fb6aad4a032c2"},{"url":"/images/gallery/hotel-gallery/12.jpg","alt":"Hotel Gallery - Image 12","isPrimary":false,"order":11,"_id":"691e250ca18fb6aad4a032c3"},{"url":"/images/gallery/hotel-gallery/13.jpg","alt":"Hotel Gallery - Image 13","isPrimary":false,"order":12,"_id":"691e250ca18fb6aad4a032c4"},{"url":"/images/gallery/hotel-gallery/14.jpg","alt":"Hotel Gallery - Image 14","isPrimary":false,"order":13,"_id":"691e250ca18fb6aad4a032c5"},{"url":"/images/gallery/hotel-gallery/15.jpg","alt":"Hotel Gallery - Image 15","isPrimary":false,"order":14,"_id":"691e250ca18fb6aad4a032c6"},{"url":"/images/gallery/hotel-gallery/16.jpg","alt":"Hotel Gallery - Image 16","isPrimary":false,"order":15,"_id":"691e250ca18fb6aad4a032c7"},{"url":"/images/gallery/hotel-gallery/17.jpg","alt":"Hotel Gallery - Image 17","isPrimary":false,"order":16,"_id":"691e250ca18fb6aad4a032c8"},{"url":"/images/gallery/hotel-gallery/18.jpg","alt":"Hotel Gallery - Image 18","isPrimary":false,"order":17,"_id":"691e250ca18fb6aad4a032c9"},{"url":"/images/gallery/hotel-gallery/19.jpg","alt":"Hotel Gallery - Image 19","isPrimary":false,"order":18,"_id":"691e250ca18fb6aad4a032ca"},{"url":"/images/gallery/hotel-gallery/20.jpg","alt":"Hotel Gallery - Image 20","isPrimary":false,"order":19,"_id":"691e250ca18fb6aad4a032cb"},{"url":"/images/gallery/hotel-gallery/21.jpg","alt":"Hotel Gallery - Image 21","isPrimary":false,"order":20,"_id":"691e250ca18fb6aad4a032cc"},{"url":"/images/gallery/hotel-gallery/22.jpg","alt":"Hotel Gallery - Image 22","isPrimary":false,"order":21,"_id":"691e250ca18fb6aad4a032cd"},{"url":"/images/gallery/hotel-gallery/23.jpg","alt":"Hotel Gallery - Image 23","isPrimary":false,"order":22,"_id":"691e250ca18fb6aad4a032ce"},{"url":"/images/gallery/hotel-gallery/24.jpg","alt":"Hotel Gallery - Image 24","isPrimary":false,"order":23,"_id":"691e250ca18fb6aad4a032cf"},{"url":"/images/gallery/hotel-gallery/25.jpg","alt":"Hotel Gallery - Image 25","isPrimary":false,"order":24,"_id":"691e250ca18fb6aad4a032d0"},{"url":"/images/gallery/hotel-gallery/26.jpg","alt":"Hotel Gallery - Image 26","isPrimary":false,"order":25,"_id":"691e250ca18fb6aad4a032d1"},{"url":"/images/gallery/hotel-gallery/27.jpg","alt":"Hotel Gallery - Image 27","isPrimary":false,"order":26,"_id":"691e250ca18fb6aad4a032d2"},{"url":"/images/gallery/hotel-gallery/28.jpg","alt":"Hotel Gallery - Image 28","isPrimary":false,"order":27,"_id":"691e250ca18fb6aad4a032d3"},{"url":"/images/gallery/hotel-gallery/29.jpg","alt":"Hotel Gallery - Image 29","isPrimary":false,"order":28,"_id":"691e250ca18fb6aad4a032d4"},{"url":"/images/gallery/hotel-gallery/30.jpg","alt":"Hotel Gallery - Image 30","isPrimary":false,"order":29,"_id":"691e250ca18fb6aad4a032d5"},{"url":"/images/gallery/hotel-gallery/31.jpg","alt":"Hotel Gallery - Image 31","isPrimary":false,"order":30,"_id":"691e250ca18fb6aad4a032d6"}],"isActive":true,"displayOrder":1,"metaTitle":"Hotel Gallery - Old Vine Hotel","metaDescription":"Explore the beautiful interiors and architecture of Old Vine Hotel in Old Damascus.","createdAt":"2025-11-19T19:45:49.064Z","updatedAt":"2025-11-19T20:14:04.178Z","__v":1,"primaryImage":"/images/gallery/hotel-gallery/01.jpg","imageCount":31},{"_id":"691e1e6d4b06e94193334c44","name":"Restaurant Gallery","slug":"restaurant-gallery","description":"Take a visual journey through our restaurant and dining spaces. Experience the ambiance, cuisine presentations, and elegant settings where culinary excellence meets authentic Syrian hospitality.","shortDescription":"Restaurant ambiance, cuisine, and dining experiences","images":[{"url":"/images/gallery/restaurant-gallery/01.jpg","alt":"Restaurant Gallery - Image 1","isPrimary":true,"order":0,"_id":"691e250ca18fb6aad4a032dc"},{"url":"/images/gallery/restaurant-gallery/02.jpg","alt":"Restaurant Gallery - Image 2","isPrimary":false,"order":1,"_id":"691e250ca18fb6aad4a032dd"},{"url":"/images/gallery/restaurant-gallery/03.jpg","alt":"Restaurant Gallery - Image 3","isPrimary":false,"order":2,"_id":"691e250ca18fb6aad4a032de"},{"url":"/images/gallery/restaurant-gallery/04.jpg","alt":"Restaurant Gallery - Image 4","isPrimary":false,"order":3,"_id":"691e250ca18fb6aad4a032df"},{"url":"/images/gallery/restaurant-gallery/05.jpg","alt":"Restaurant Gallery - Image 5","isPrimary":false,"order":4,"_id":"691e250ca18fb6aad4a032e0"},{"url":"/images/gallery/restaurant-gallery/06.jpg","alt":"Restaurant Gallery - Image 6","isPrimary":false,"order":5,"_id":"691e250ca18fb6aad4a032e1"},{"url":"/images/gallery/restaurant-gallery/07.jpg","alt":"Restaurant Gallery - Image 7","isPrimary":false,"order":6,"_id":"691e250ca18fb6aad4a032e2"},{"url":"/images/gallery/restaurant-gallery/08.jpg","alt":"Restaurant Gallery - Image 8","isPrimary":false,"order":7,"_id":"691e250ca18fb6aad4a032e3"},{"url":"/images/gallery/restaurant-gallery/09.jpg","alt":"Restaurant Gallery - Image 9","isPrimary":false,"order":8,"_id":"691e250ca18fb6aad4a032e4"},{"url":"/images/gallery/restaurant-gallery/10.jpg","alt":"Restaurant Gallery - Image 10","isPrimary":false,"order":9,"_id":"691e250ca18fb6aad4a032e5"},{"url":"/images/gallery/restaurant-gallery/11.jpg","alt":"Restaurant Gallery - Image 11","isPrimary":false,"order":10,"_id":"691e250ca18fb6aad4a032e6"},{"url":"/images/gallery/restaurant-gallery/12.jpg","alt":"Restaurant Gallery - Image 12","isPrimary":false,"order":11,"_id":"691e250ca18fb6aad4a032e7"},{"url":"/images/gallery/restaurant-gallery/13.jpg","alt":"Restaurant Gallery - Image 13","isPrimary":false,"order":12,"_id":"691e250ca18fb6aad4a032e8"},{"url":"/images/gallery/restaurant-gallery/14.jpg","alt":"Restaurant Gallery - Image 14","isPrimary":false,"order":13,"_id":"691e250ca18fb6aad4a032e9"},{"url":"/images/gallery/restaurant-gallery/15.jpg","alt":"Restaurant Gallery - Image 15","isPrimary":false,"order":14,"_id":"691e250ca18fb6aad4a032ea"},{"url":"/images/gallery/restaurant-gallery/16.jpg","alt":"Restaurant Gallery - Image 16","isPrimary":false,"order":15,"_id":"691e250ca18fb6aad4a032eb"},{"url":"/images/gallery/restaurant-gallery/17.jpg","alt":"Restaurant Gallery - Image 17","isPrimary":false,"order":16,"_id":"691e250ca18fb6aad4a032ec"},{"url":"/images/gallery/restaurant-gallery/18.jpg","alt":"Restaurant Gallery - Image 18","isPrimary":false,"order":17,"_id":"691e250ca18fb6aad4a032ed"},{"url":"/images/gallery/restaurant-gallery/19.jpg","alt":"Restaurant Gallery - Image 19","isPrimary":false,"order":18,"_id":"691e250ca18fb6aad4a032ee"},{"url":"/images/gallery/restaurant-gallery/20.jpg","alt":"Restaurant Gallery - Image 20","isPrimary":false,"order":19,"_id":"691e250ca18fb6aad4a032ef"},{"url":"/images/gallery/restaurant-gallery/21.jpg","alt":"Restaurant Gallery - Image 21","isPrimary":false,"order":20,"_id":"691e250ca18fb6aad4a032f0"},{"url":"/images/gallery/restaurant-gallery/22.jpg","alt":"Restaurant Gallery - Image 22","isPrimary":false,"order":21,"_id":"691e250ca18fb6aad4a032f1"},{"url":"/images/gallery/restaurant-gallery/23.jpg","alt":"Restaurant Gallery - Image 23","isPrimary":false,"order":22,"_id":"691e250ca18fb6aad4a032f2"},{"url":"/images/gallery/restaurant-gallery/24.jpg","alt":"Restaurant Gallery - Image 24","isPrimary":false,"order":23,"_id":"691e250ca18fb6aad4a032f3"},{"url":"/images/gallery/restaurant-gallery/25.jpg","alt":"Restaurant Gallery - Image 25","isPrimary":false,"order":24,"_id":"691e250ca18fb6aad4a032f4"},{"url":"/images/gallery/restaurant-gallery/26.jpg","alt":"Restaurant Gallery - Image 26","isPrimary":false,"order":25,"_id":"691e250ca18fb6aad4a032f5"},{"url":"/images/gallery/restaurant-gallery/27.jpg","alt":"Restaurant Gallery - Image 27","isPrimary":false,"order":26,"_id":"691e250ca18fb6aad4a032f6"},{"url":"/images/gallery/restaurant-gallery/28.jpg","alt":"Restaurant Gallery - Image 28","isPrimary":false,"order":27,"_id":"691e250ca18fb6aad4a032f7"},{"url":"/images/gallery/restaurant-gallery/29.jpg","alt":"Restaurant Gallery - Image 29","isPrimary":false,"order":28,"_id":"691e250ca18fb6aad4a032f8"},{"url":"/images/gallery/restaurant-gallery/30.jpg","alt":"Restaurant Gallery - Image 30","isPrimary":false,"order":29,"_id":"691e250ca18fb6aad4a032f9"},{"url":"/images/gallery/restaurant-gallery/31.jpg","alt":"Restaurant Gallery - Image 31","isPrimary":false,"order":30,"_id":"691e250ca18fb6aad4a032fa"}],"isActive":true,"displayOrder":2,"metaTitle":"Restaurant Gallery - Old Vine Hotel","metaDescription":"Explore our restaurant and dining spaces at Old Vine Hotel.","createdAt":"2025-11-19T19:45:49.068Z","updatedAt":"2025-11-19T20:14:04.191Z","__v":1,"primaryImage":"/images/gallery/restaurant-gallery/01.jpg","imageCount":31}]}} \ No newline at end of file diff --git a/client/build/static-data/gallery-category-hotel-gallery.json b/client/build/static-data/gallery-category-hotel-gallery.json new file mode 100644 index 0000000..df3a5cf --- /dev/null +++ b/client/build/static-data/gallery-category-hotel-gallery.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"_id":"691e1e6d4b06e94193334c3e","name":"Hotel Gallery","slug":"hotel-gallery","description":"Explore the beautiful interiors, architecture, and spaces of Old Vine Hotel. From elegant rooms to stunning courtyards, discover the charm of our historic property.","shortDescription":"Beautiful interiors, architecture, and spaces of our hotel","images":[{"url":"/images/gallery/hotel-gallery/01.jpg","alt":"Hotel Gallery - Image 1","isPrimary":true,"order":0,"_id":"691e250ca18fb6aad4a032b8","id":"691e250ca18fb6aad4a032b8"},{"url":"/images/gallery/hotel-gallery/02.jpg","alt":"Hotel Gallery - Image 2","isPrimary":false,"order":1,"_id":"691e250ca18fb6aad4a032b9","id":"691e250ca18fb6aad4a032b9"},{"url":"/images/gallery/hotel-gallery/03.jpg","alt":"Hotel Gallery - Image 3","isPrimary":false,"order":2,"_id":"691e250ca18fb6aad4a032ba","id":"691e250ca18fb6aad4a032ba"},{"url":"/images/gallery/hotel-gallery/04.jpg","alt":"Hotel Gallery - Image 4","isPrimary":false,"order":3,"_id":"691e250ca18fb6aad4a032bb","id":"691e250ca18fb6aad4a032bb"},{"url":"/images/gallery/hotel-gallery/05.jpg","alt":"Hotel Gallery - Image 5","isPrimary":false,"order":4,"_id":"691e250ca18fb6aad4a032bc","id":"691e250ca18fb6aad4a032bc"},{"url":"/images/gallery/hotel-gallery/06.jpg","alt":"Hotel Gallery - Image 6","isPrimary":false,"order":5,"_id":"691e250ca18fb6aad4a032bd","id":"691e250ca18fb6aad4a032bd"},{"url":"/images/gallery/hotel-gallery/07.jpg","alt":"Hotel Gallery - Image 7","isPrimary":false,"order":6,"_id":"691e250ca18fb6aad4a032be","id":"691e250ca18fb6aad4a032be"},{"url":"/images/gallery/hotel-gallery/08.jpg","alt":"Hotel Gallery - Image 8","isPrimary":false,"order":7,"_id":"691e250ca18fb6aad4a032bf","id":"691e250ca18fb6aad4a032bf"},{"url":"/images/gallery/hotel-gallery/09.jpg","alt":"Hotel Gallery - Image 9","isPrimary":false,"order":8,"_id":"691e250ca18fb6aad4a032c0","id":"691e250ca18fb6aad4a032c0"},{"url":"/images/gallery/hotel-gallery/10.jpg","alt":"Hotel Gallery - Image 10","isPrimary":false,"order":9,"_id":"691e250ca18fb6aad4a032c1","id":"691e250ca18fb6aad4a032c1"},{"url":"/images/gallery/hotel-gallery/11.jpg","alt":"Hotel Gallery - Image 11","isPrimary":false,"order":10,"_id":"691e250ca18fb6aad4a032c2","id":"691e250ca18fb6aad4a032c2"},{"url":"/images/gallery/hotel-gallery/12.jpg","alt":"Hotel Gallery - Image 12","isPrimary":false,"order":11,"_id":"691e250ca18fb6aad4a032c3","id":"691e250ca18fb6aad4a032c3"},{"url":"/images/gallery/hotel-gallery/13.jpg","alt":"Hotel Gallery - Image 13","isPrimary":false,"order":12,"_id":"691e250ca18fb6aad4a032c4","id":"691e250ca18fb6aad4a032c4"},{"url":"/images/gallery/hotel-gallery/14.jpg","alt":"Hotel Gallery - Image 14","isPrimary":false,"order":13,"_id":"691e250ca18fb6aad4a032c5","id":"691e250ca18fb6aad4a032c5"},{"url":"/images/gallery/hotel-gallery/15.jpg","alt":"Hotel Gallery - Image 15","isPrimary":false,"order":14,"_id":"691e250ca18fb6aad4a032c6","id":"691e250ca18fb6aad4a032c6"},{"url":"/images/gallery/hotel-gallery/16.jpg","alt":"Hotel Gallery - Image 16","isPrimary":false,"order":15,"_id":"691e250ca18fb6aad4a032c7","id":"691e250ca18fb6aad4a032c7"},{"url":"/images/gallery/hotel-gallery/17.jpg","alt":"Hotel Gallery - Image 17","isPrimary":false,"order":16,"_id":"691e250ca18fb6aad4a032c8","id":"691e250ca18fb6aad4a032c8"},{"url":"/images/gallery/hotel-gallery/18.jpg","alt":"Hotel Gallery - Image 18","isPrimary":false,"order":17,"_id":"691e250ca18fb6aad4a032c9","id":"691e250ca18fb6aad4a032c9"},{"url":"/images/gallery/hotel-gallery/19.jpg","alt":"Hotel Gallery - Image 19","isPrimary":false,"order":18,"_id":"691e250ca18fb6aad4a032ca","id":"691e250ca18fb6aad4a032ca"},{"url":"/images/gallery/hotel-gallery/20.jpg","alt":"Hotel Gallery - Image 20","isPrimary":false,"order":19,"_id":"691e250ca18fb6aad4a032cb","id":"691e250ca18fb6aad4a032cb"},{"url":"/images/gallery/hotel-gallery/21.jpg","alt":"Hotel Gallery - Image 21","isPrimary":false,"order":20,"_id":"691e250ca18fb6aad4a032cc","id":"691e250ca18fb6aad4a032cc"},{"url":"/images/gallery/hotel-gallery/22.jpg","alt":"Hotel Gallery - Image 22","isPrimary":false,"order":21,"_id":"691e250ca18fb6aad4a032cd","id":"691e250ca18fb6aad4a032cd"},{"url":"/images/gallery/hotel-gallery/23.jpg","alt":"Hotel Gallery - Image 23","isPrimary":false,"order":22,"_id":"691e250ca18fb6aad4a032ce","id":"691e250ca18fb6aad4a032ce"},{"url":"/images/gallery/hotel-gallery/24.jpg","alt":"Hotel Gallery - Image 24","isPrimary":false,"order":23,"_id":"691e250ca18fb6aad4a032cf","id":"691e250ca18fb6aad4a032cf"},{"url":"/images/gallery/hotel-gallery/25.jpg","alt":"Hotel Gallery - Image 25","isPrimary":false,"order":24,"_id":"691e250ca18fb6aad4a032d0","id":"691e250ca18fb6aad4a032d0"},{"url":"/images/gallery/hotel-gallery/26.jpg","alt":"Hotel Gallery - Image 26","isPrimary":false,"order":25,"_id":"691e250ca18fb6aad4a032d1","id":"691e250ca18fb6aad4a032d1"},{"url":"/images/gallery/hotel-gallery/27.jpg","alt":"Hotel Gallery - Image 27","isPrimary":false,"order":26,"_id":"691e250ca18fb6aad4a032d2","id":"691e250ca18fb6aad4a032d2"},{"url":"/images/gallery/hotel-gallery/28.jpg","alt":"Hotel Gallery - Image 28","isPrimary":false,"order":27,"_id":"691e250ca18fb6aad4a032d3","id":"691e250ca18fb6aad4a032d3"},{"url":"/images/gallery/hotel-gallery/29.jpg","alt":"Hotel Gallery - Image 29","isPrimary":false,"order":28,"_id":"691e250ca18fb6aad4a032d4","id":"691e250ca18fb6aad4a032d4"},{"url":"/images/gallery/hotel-gallery/30.jpg","alt":"Hotel Gallery - Image 30","isPrimary":false,"order":29,"_id":"691e250ca18fb6aad4a032d5","id":"691e250ca18fb6aad4a032d5"},{"url":"/images/gallery/hotel-gallery/31.jpg","alt":"Hotel Gallery - Image 31","isPrimary":false,"order":30,"_id":"691e250ca18fb6aad4a032d6","id":"691e250ca18fb6aad4a032d6"}],"isActive":true,"displayOrder":1,"metaTitle":"Hotel Gallery - Old Vine Hotel","metaDescription":"Explore the beautiful interiors and architecture of Old Vine Hotel in Old Damascus.","createdAt":"2025-11-19T19:45:49.064Z","updatedAt":"2025-11-19T20:14:04.178Z","__v":1,"primaryImage":"/images/gallery/hotel-gallery/01.jpg","imageCount":31,"id":"691e1e6d4b06e94193334c3e"}}} \ No newline at end of file diff --git a/client/build/static-data/gallery-category-restaurant-gallery.json b/client/build/static-data/gallery-category-restaurant-gallery.json new file mode 100644 index 0000000..7b55a60 --- /dev/null +++ b/client/build/static-data/gallery-category-restaurant-gallery.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"_id":"691e1e6d4b06e94193334c44","name":"Restaurant Gallery","slug":"restaurant-gallery","description":"Take a visual journey through our restaurant and dining spaces. Experience the ambiance, cuisine presentations, and elegant settings where culinary excellence meets authentic Syrian hospitality.","shortDescription":"Restaurant ambiance, cuisine, and dining experiences","images":[{"url":"/images/gallery/restaurant-gallery/01.jpg","alt":"Restaurant Gallery - Image 1","isPrimary":true,"order":0,"_id":"691e250ca18fb6aad4a032dc","id":"691e250ca18fb6aad4a032dc"},{"url":"/images/gallery/restaurant-gallery/02.jpg","alt":"Restaurant Gallery - Image 2","isPrimary":false,"order":1,"_id":"691e250ca18fb6aad4a032dd","id":"691e250ca18fb6aad4a032dd"},{"url":"/images/gallery/restaurant-gallery/03.jpg","alt":"Restaurant Gallery - Image 3","isPrimary":false,"order":2,"_id":"691e250ca18fb6aad4a032de","id":"691e250ca18fb6aad4a032de"},{"url":"/images/gallery/restaurant-gallery/04.jpg","alt":"Restaurant Gallery - Image 4","isPrimary":false,"order":3,"_id":"691e250ca18fb6aad4a032df","id":"691e250ca18fb6aad4a032df"},{"url":"/images/gallery/restaurant-gallery/05.jpg","alt":"Restaurant Gallery - Image 5","isPrimary":false,"order":4,"_id":"691e250ca18fb6aad4a032e0","id":"691e250ca18fb6aad4a032e0"},{"url":"/images/gallery/restaurant-gallery/06.jpg","alt":"Restaurant Gallery - Image 6","isPrimary":false,"order":5,"_id":"691e250ca18fb6aad4a032e1","id":"691e250ca18fb6aad4a032e1"},{"url":"/images/gallery/restaurant-gallery/07.jpg","alt":"Restaurant Gallery - Image 7","isPrimary":false,"order":6,"_id":"691e250ca18fb6aad4a032e2","id":"691e250ca18fb6aad4a032e2"},{"url":"/images/gallery/restaurant-gallery/08.jpg","alt":"Restaurant Gallery - Image 8","isPrimary":false,"order":7,"_id":"691e250ca18fb6aad4a032e3","id":"691e250ca18fb6aad4a032e3"},{"url":"/images/gallery/restaurant-gallery/09.jpg","alt":"Restaurant Gallery - Image 9","isPrimary":false,"order":8,"_id":"691e250ca18fb6aad4a032e4","id":"691e250ca18fb6aad4a032e4"},{"url":"/images/gallery/restaurant-gallery/10.jpg","alt":"Restaurant Gallery - Image 10","isPrimary":false,"order":9,"_id":"691e250ca18fb6aad4a032e5","id":"691e250ca18fb6aad4a032e5"},{"url":"/images/gallery/restaurant-gallery/11.jpg","alt":"Restaurant Gallery - Image 11","isPrimary":false,"order":10,"_id":"691e250ca18fb6aad4a032e6","id":"691e250ca18fb6aad4a032e6"},{"url":"/images/gallery/restaurant-gallery/12.jpg","alt":"Restaurant Gallery - Image 12","isPrimary":false,"order":11,"_id":"691e250ca18fb6aad4a032e7","id":"691e250ca18fb6aad4a032e7"},{"url":"/images/gallery/restaurant-gallery/13.jpg","alt":"Restaurant Gallery - Image 13","isPrimary":false,"order":12,"_id":"691e250ca18fb6aad4a032e8","id":"691e250ca18fb6aad4a032e8"},{"url":"/images/gallery/restaurant-gallery/14.jpg","alt":"Restaurant Gallery - Image 14","isPrimary":false,"order":13,"_id":"691e250ca18fb6aad4a032e9","id":"691e250ca18fb6aad4a032e9"},{"url":"/images/gallery/restaurant-gallery/15.jpg","alt":"Restaurant Gallery - Image 15","isPrimary":false,"order":14,"_id":"691e250ca18fb6aad4a032ea","id":"691e250ca18fb6aad4a032ea"},{"url":"/images/gallery/restaurant-gallery/16.jpg","alt":"Restaurant Gallery - Image 16","isPrimary":false,"order":15,"_id":"691e250ca18fb6aad4a032eb","id":"691e250ca18fb6aad4a032eb"},{"url":"/images/gallery/restaurant-gallery/17.jpg","alt":"Restaurant Gallery - Image 17","isPrimary":false,"order":16,"_id":"691e250ca18fb6aad4a032ec","id":"691e250ca18fb6aad4a032ec"},{"url":"/images/gallery/restaurant-gallery/18.jpg","alt":"Restaurant Gallery - Image 18","isPrimary":false,"order":17,"_id":"691e250ca18fb6aad4a032ed","id":"691e250ca18fb6aad4a032ed"},{"url":"/images/gallery/restaurant-gallery/19.jpg","alt":"Restaurant Gallery - Image 19","isPrimary":false,"order":18,"_id":"691e250ca18fb6aad4a032ee","id":"691e250ca18fb6aad4a032ee"},{"url":"/images/gallery/restaurant-gallery/20.jpg","alt":"Restaurant Gallery - Image 20","isPrimary":false,"order":19,"_id":"691e250ca18fb6aad4a032ef","id":"691e250ca18fb6aad4a032ef"},{"url":"/images/gallery/restaurant-gallery/21.jpg","alt":"Restaurant Gallery - Image 21","isPrimary":false,"order":20,"_id":"691e250ca18fb6aad4a032f0","id":"691e250ca18fb6aad4a032f0"},{"url":"/images/gallery/restaurant-gallery/22.jpg","alt":"Restaurant Gallery - Image 22","isPrimary":false,"order":21,"_id":"691e250ca18fb6aad4a032f1","id":"691e250ca18fb6aad4a032f1"},{"url":"/images/gallery/restaurant-gallery/23.jpg","alt":"Restaurant Gallery - Image 23","isPrimary":false,"order":22,"_id":"691e250ca18fb6aad4a032f2","id":"691e250ca18fb6aad4a032f2"},{"url":"/images/gallery/restaurant-gallery/24.jpg","alt":"Restaurant Gallery - Image 24","isPrimary":false,"order":23,"_id":"691e250ca18fb6aad4a032f3","id":"691e250ca18fb6aad4a032f3"},{"url":"/images/gallery/restaurant-gallery/25.jpg","alt":"Restaurant Gallery - Image 25","isPrimary":false,"order":24,"_id":"691e250ca18fb6aad4a032f4","id":"691e250ca18fb6aad4a032f4"},{"url":"/images/gallery/restaurant-gallery/26.jpg","alt":"Restaurant Gallery - Image 26","isPrimary":false,"order":25,"_id":"691e250ca18fb6aad4a032f5","id":"691e250ca18fb6aad4a032f5"},{"url":"/images/gallery/restaurant-gallery/27.jpg","alt":"Restaurant Gallery - Image 27","isPrimary":false,"order":26,"_id":"691e250ca18fb6aad4a032f6","id":"691e250ca18fb6aad4a032f6"},{"url":"/images/gallery/restaurant-gallery/28.jpg","alt":"Restaurant Gallery - Image 28","isPrimary":false,"order":27,"_id":"691e250ca18fb6aad4a032f7","id":"691e250ca18fb6aad4a032f7"},{"url":"/images/gallery/restaurant-gallery/29.jpg","alt":"Restaurant Gallery - Image 29","isPrimary":false,"order":28,"_id":"691e250ca18fb6aad4a032f8","id":"691e250ca18fb6aad4a032f8"},{"url":"/images/gallery/restaurant-gallery/30.jpg","alt":"Restaurant Gallery - Image 30","isPrimary":false,"order":29,"_id":"691e250ca18fb6aad4a032f9","id":"691e250ca18fb6aad4a032f9"},{"url":"/images/gallery/restaurant-gallery/31.jpg","alt":"Restaurant Gallery - Image 31","isPrimary":false,"order":30,"_id":"691e250ca18fb6aad4a032fa","id":"691e250ca18fb6aad4a032fa"}],"isActive":true,"displayOrder":2,"metaTitle":"Restaurant Gallery - Old Vine Hotel","metaDescription":"Explore our restaurant and dining spaces at Old Vine Hotel.","createdAt":"2025-11-19T19:45:49.068Z","updatedAt":"2025-11-19T20:14:04.191Z","__v":1,"primaryImage":"/images/gallery/restaurant-gallery/01.jpg","imageCount":31,"id":"691e1e6d4b06e94193334c44"}}} \ No newline at end of file diff --git a/client/build/static-data/home-content.json b/client/build/static-data/home-content.json new file mode 100644 index 0000000..e91ccd2 --- /dev/null +++ b/client/build/static-data/home-content.json @@ -0,0 +1 @@ +{"success":true,"data":{"content":{"hero":{"title":"Your Home Away From Home","subtitle":"Experience Damascus Like Never Before","description":"Nestled in the historic heart of Old Damascus, Old Vine Hotel offers an unforgettable blend of traditional Syrian architecture and modern luxury. Each room tells a story, each corner whispers history, and every moment creates lasting memories.","backgroundImage":"/images/hero.jpg","ctaText":"Explore Rooms","ctaLink":"/rooms"},"seo":{"title":"Old Vine Hotel - Luxury Hotel in Old Damascus","description":"Experience timeless elegance and authentic Syrian hospitality at Old Vine Hotel, a beautifully restored historic hotel in the heart of Old Damascus.","keywords":["damascus hotel","old damascus","luxury hotel syria","boutique hotel damascus"],"ogImage":"/images/hero.jpg"},"_id":"6919630dee4710dfb2cafdaa","page":"home","sections":[{"sectionId":"welcome","title":"Your Home Away From Home","subtitle":"Experience Damascus Like Never Before","content":"Hidden within the winding alleys of the ancient city of Old Damascus, Old Vine Hotel is a 5-star boutique haven that captures the essence of Syria's timeless charm. Once three historic damascene homes, the properties have been lovingly restored and seamlessly connected to create an intimate sanctuary of 25 beautifully designed rooms and suites.\n\nEach corner whispers stories of the past, where handcrafted wood, marble courtyards, and elegant fountains blend effortlessly with modern comfort and sophistication. from the moment you step inside, you are embraced by an atmosphere of serenity, authenticity, and understated luxury—a true reflection of Damascus at its beauty.","isActive":true,"items":[],"_id":"691ac369d68bba0528b6acc5","id":"691ac369d68bba0528b6acc5"},{"sectionId":"features","title":"Exceptional Amenities","subtitle":"Everything You Need for a Perfect Stay","content":"From luxurious accommodations to world-class dining, every detail has been carefully crafted to ensure your comfort.","order":2,"isActive":true,"items":[{"icon":"wifi","title":"Free Wi-Fi","description":"High-speed internet throughout the hotel"},{"icon":"restaurant","title":"Fine Dining","description":"Authentic Syrian and international cuisine"},{"icon":"spa","title":"Spa & Wellness","description":"Relax and rejuvenate in our spa"},{"icon":"concierge","title":"24/7 Concierge","description":"Personalized service anytime"}],"layout":"full-width","_id":"6919630dee4710dfb2cafdac","id":"6919630dee4710dfb2cafdac"}],"version":3,"isPublished":true,"publishedAt":"2025-11-16T05:37:17.783Z","createdAt":"2025-11-16T05:37:17.782Z","updatedAt":"2025-11-17T06:40:41.860Z","__v":0,"id":"6919630dee4710dfb2cafdaa"}}} \ No newline at end of file diff --git a/client/build/static-data/room-categories.json b/client/build/static-data/room-categories.json new file mode 100644 index 0000000..9b7dc7d --- /dev/null +++ b/client/build/static-data/room-categories.json @@ -0,0 +1 @@ +{"success":true,"data":{"categories":[{"_id":"691df138be65fb0965bbaa45","name":"Single Room","slug":"single-room","description":"Comfortable single rooms perfect for solo travelers. Each room is thoughtfully designed with modern amenities and traditional Damascene touches.","shortDescription":"Perfect for solo travelers with modern amenities","images":[{"url":"/images/rooms/single-room/01.jpg","alt":"Single Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca707214e7"},{"url":"/images/rooms/single-room/02.jpg","alt":"Single Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca707214e8"},{"url":"/images/rooms/single-room/03.jpg","alt":"Single Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca707214e9"},{"url":"/images/rooms/single-room/04.jpg","alt":"Single Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca707214ea"},{"url":"/images/rooms/single-room/05.jpg","alt":"Single Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca707214eb"},{"url":"/images/rooms/single-room/06.jpg","alt":"Single Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca707214ec"},{"url":"/images/rooms/single-room/07.jpg","alt":"Single Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca707214ed"},{"url":"/images/rooms/single-room/08.jpg","alt":"Single Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca707214ee"},{"url":"/images/rooms/single-room/09.jpg","alt":"Single Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca707214ef"},{"url":"/images/rooms/single-room/10.jpg","alt":"Single Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca707214f0"},{"url":"/images/rooms/single-room/11.jpg","alt":"Single Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca707214f1"},{"url":"/images/rooms/single-room/12.jpg","alt":"Single Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca707214f2"},{"url":"/images/rooms/single-room/13.jpg","alt":"Single Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca707214f3"}],"priceRange":{"min":0,"max":0},"features":["WiFi","TV","AC","Minibar","Safe","City View"],"metaTitle":"Single Rooms - Old Vine Hotel","metaDescription":"Comfortable single rooms perfect for solo travelers at Old Vine Hotel in Damascus.","isActive":true,"displayOrder":1,"roomCount":0,"createdAt":"2025-11-19T16:32:56.473Z","updatedAt":"2025-11-19T16:56:56.701Z","__v":1,"primaryImage":"/images/rooms/single-room/01.jpg","imageCount":13},{"_id":"691df138be65fb0965bbaa4b","name":"Double Room","slug":"double-room","description":"Spacious double rooms ideal for couples or business travelers. Features comfortable double beds, elegant furnishings, and stunning views of Old Damascus.","shortDescription":"Spacious rooms perfect for couples with elegant furnishings","images":[{"url":"/images/rooms/double-room/01.jpg","alt":"Double Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca707214f9"},{"url":"/images/rooms/double-room/02.jpg","alt":"Double Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca707214fa"},{"url":"/images/rooms/double-room/03.jpg","alt":"Double Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca707214fb"},{"url":"/images/rooms/double-room/04.jpg","alt":"Double Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca707214fc"},{"url":"/images/rooms/double-room/05.jpg","alt":"Double Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca707214fd"},{"url":"/images/rooms/double-room/06.jpg","alt":"Double Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca707214fe"},{"url":"/images/rooms/double-room/07.jpg","alt":"Double Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca707214ff"},{"url":"/images/rooms/double-room/08.jpg","alt":"Double Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca70721500"},{"url":"/images/rooms/double-room/09.jpg","alt":"Double Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca70721501"},{"url":"/images/rooms/double-room/10.jpg","alt":"Double Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca70721502"},{"url":"/images/rooms/double-room/11.jpg","alt":"Double Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca70721503"},{"url":"/images/rooms/double-room/12.jpg","alt":"Double Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca70721504"},{"url":"/images/rooms/double-room/13.jpg","alt":"Double Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca70721505"},{"url":"/images/rooms/double-room/14.jpg","alt":"Double Room - Image 14","isPrimary":false,"order":13,"_id":"691df6d80dcff6ca70721506"},{"url":"/images/rooms/double-room/15.jpg","alt":"Double Room - Image 15","isPrimary":false,"order":14,"_id":"691df6d80dcff6ca70721507"},{"url":"/images/rooms/double-room/16.jpg","alt":"Double Room - Image 16","isPrimary":false,"order":15,"_id":"691df6d80dcff6ca70721508"},{"url":"/images/rooms/double-room/17.jpg","alt":"Double Room - Image 17","isPrimary":false,"order":16,"_id":"691df6d80dcff6ca70721509"},{"url":"/images/rooms/double-room/18.jpg","alt":"Double Room - Image 18","isPrimary":false,"order":17,"_id":"691df6d80dcff6ca7072150a"},{"url":"/images/rooms/double-room/19.jpg","alt":"Double Room - Image 19","isPrimary":false,"order":18,"_id":"691df6d80dcff6ca7072150b"},{"url":"/images/rooms/double-room/20.jpg","alt":"Double Room - Image 20","isPrimary":false,"order":19,"_id":"691df6d80dcff6ca7072150c"},{"url":"/images/rooms/double-room/21.jpg","alt":"Double Room - Image 21","isPrimary":false,"order":20,"_id":"691df6d80dcff6ca7072150d"},{"url":"/images/rooms/double-room/22.jpg","alt":"Double Room - Image 22","isPrimary":false,"order":21,"_id":"691df6d80dcff6ca7072150e"},{"url":"/images/rooms/double-room/23.jpg","alt":"Double Room - Image 23","isPrimary":false,"order":22,"_id":"691df6d80dcff6ca7072150f"},{"url":"/images/rooms/double-room/24.jpg","alt":"Double Room - Image 24","isPrimary":false,"order":23,"_id":"691df6d80dcff6ca70721510"},{"url":"/images/rooms/double-room/25.jpg","alt":"Double Room - Image 25","isPrimary":false,"order":24,"_id":"691df6d80dcff6ca70721511"},{"url":"/images/rooms/double-room/26.jpg","alt":"Double Room - Image 26","isPrimary":false,"order":25,"_id":"691df6d80dcff6ca70721512"},{"url":"/images/rooms/double-room/27.jpg","alt":"Double Room - Image 27","isPrimary":false,"order":26,"_id":"691df6d80dcff6ca70721513"},{"url":"/images/rooms/double-room/28.jpg","alt":"Double Room - Image 28","isPrimary":false,"order":27,"_id":"691df6d80dcff6ca70721514"},{"url":"/images/rooms/double-room/29.jpg","alt":"Double Room - Image 29","isPrimary":false,"order":28,"_id":"691df6d80dcff6ca70721515"},{"url":"/images/rooms/double-room/30.jpg","alt":"Double Room - Image 30","isPrimary":false,"order":29,"_id":"691df6d80dcff6ca70721516"},{"url":"/images/rooms/double-room/31.jpg","alt":"Double Room - Image 31","isPrimary":false,"order":30,"_id":"691df6d80dcff6ca70721517"},{"url":"/images/rooms/double-room/32.jpg","alt":"Double Room - Image 32","isPrimary":false,"order":31,"_id":"691df6d80dcff6ca70721518"},{"url":"/images/rooms/double-room/33.jpg","alt":"Double Room - Image 33","isPrimary":false,"order":32,"_id":"691df6d80dcff6ca70721519"}],"priceRange":{"min":0,"max":0},"features":["WiFi","TV","AC","Minibar","Safe","City View","Workspace","Balcony"],"metaTitle":"Double Rooms - Old Vine Hotel","metaDescription":"Spacious double rooms with elegant furnishings and stunning views at Old Vine Hotel.","isActive":true,"displayOrder":2,"roomCount":0,"createdAt":"2025-11-19T16:32:56.477Z","updatedAt":"2025-11-19T16:56:56.709Z","__v":1,"primaryImage":"/images/rooms/double-room/01.jpg","imageCount":33},{"_id":"691df138be65fb0965bbaa4e","name":"Suite Room","slug":"suite-room","description":"Luxurious suite rooms offering separate living areas, premium amenities, and exclusive services. Perfect for extended stays or special occasions.","shortDescription":"Luxurious suites with separate living areas and premium amenities","images":[{"url":"/images/rooms/suite-room/01.jpg","alt":"Suite Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca7072151c"},{"url":"/images/rooms/suite-room/02.jpg","alt":"Suite Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca7072151d"},{"url":"/images/rooms/suite-room/03.jpg","alt":"Suite Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca7072151e"},{"url":"/images/rooms/suite-room/04.jpg","alt":"Suite Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca7072151f"},{"url":"/images/rooms/suite-room/05.jpg","alt":"Suite Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca70721520"},{"url":"/images/rooms/suite-room/06.jpg","alt":"Suite Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca70721521"},{"url":"/images/rooms/suite-room/07.jpg","alt":"Suite Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca70721522"},{"url":"/images/rooms/suite-room/08.jpg","alt":"Suite Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca70721523"},{"url":"/images/rooms/suite-room/09.jpg","alt":"Suite Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca70721524"},{"url":"/images/rooms/suite-room/10.jpg","alt":"Suite Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca70721525"},{"url":"/images/rooms/suite-room/11.jpg","alt":"Suite Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca70721526"},{"url":"/images/rooms/suite-room/12.jpg","alt":"Suite Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca70721527"},{"url":"/images/rooms/suite-room/13.jpg","alt":"Suite Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca70721528"}],"priceRange":{"min":0,"max":0},"features":["WiFi","TV","AC","Minibar","Safe","City View","Workspace","Balcony","Jacuzzi","Terrace"],"metaTitle":"Suite Rooms - Old Vine Hotel","metaDescription":"Luxurious suite rooms with separate living areas at Old Vine Hotel in Damascus.","isActive":true,"displayOrder":3,"roomCount":0,"createdAt":"2025-11-19T16:32:56.478Z","updatedAt":"2025-11-19T16:56:56.713Z","__v":1,"primaryImage":"/images/rooms/suite-room/01.jpg","imageCount":13},{"_id":"691df138be65fb0965bbaa51","name":"Twin Room","slug":"twin-room","description":"Comfortable twin rooms with two separate beds, ideal for friends or family traveling together. Features all modern amenities in a traditional setting.","shortDescription":"Comfortable rooms with two beds, perfect for friends or family","images":[{"url":"/images/rooms/twin-room/01.jpg","alt":"Twin Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca7072152b"},{"url":"/images/rooms/twin-room/02.jpg","alt":"Twin Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca7072152c"}],"priceRange":{"min":0,"max":0},"features":["WiFi","TV","AC","Minibar","Safe","City View"],"metaTitle":"Twin Rooms - Old Vine Hotel","metaDescription":"Comfortable twin rooms with two separate beds at Old Vine Hotel.","isActive":true,"displayOrder":4,"roomCount":0,"createdAt":"2025-11-19T16:32:56.480Z","updatedAt":"2025-11-19T16:56:56.715Z","__v":1,"primaryImage":"/images/rooms/twin-room/01.jpg","imageCount":2}]}} \ No newline at end of file diff --git a/client/build/static-data/room-category-double-room.json b/client/build/static-data/room-category-double-room.json new file mode 100644 index 0000000..4fc3de6 --- /dev/null +++ b/client/build/static-data/room-category-double-room.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"priceRange":{"min":0,"max":0},"_id":"691df138be65fb0965bbaa4b","name":"Double Room","slug":"double-room","description":"Spacious double rooms ideal for couples or business travelers. Features comfortable double beds, elegant furnishings, and stunning views of Old Damascus.","shortDescription":"Spacious rooms perfect for couples with elegant furnishings","images":[{"url":"/images/rooms/double-room/01.jpg","alt":"Double Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca707214f9","id":"691df6d80dcff6ca707214f9"},{"url":"/images/rooms/double-room/02.jpg","alt":"Double Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca707214fa","id":"691df6d80dcff6ca707214fa"},{"url":"/images/rooms/double-room/03.jpg","alt":"Double Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca707214fb","id":"691df6d80dcff6ca707214fb"},{"url":"/images/rooms/double-room/04.jpg","alt":"Double Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca707214fc","id":"691df6d80dcff6ca707214fc"},{"url":"/images/rooms/double-room/05.jpg","alt":"Double Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca707214fd","id":"691df6d80dcff6ca707214fd"},{"url":"/images/rooms/double-room/06.jpg","alt":"Double Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca707214fe","id":"691df6d80dcff6ca707214fe"},{"url":"/images/rooms/double-room/07.jpg","alt":"Double Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca707214ff","id":"691df6d80dcff6ca707214ff"},{"url":"/images/rooms/double-room/08.jpg","alt":"Double Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca70721500","id":"691df6d80dcff6ca70721500"},{"url":"/images/rooms/double-room/09.jpg","alt":"Double Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca70721501","id":"691df6d80dcff6ca70721501"},{"url":"/images/rooms/double-room/10.jpg","alt":"Double Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca70721502","id":"691df6d80dcff6ca70721502"},{"url":"/images/rooms/double-room/11.jpg","alt":"Double Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca70721503","id":"691df6d80dcff6ca70721503"},{"url":"/images/rooms/double-room/12.jpg","alt":"Double Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca70721504","id":"691df6d80dcff6ca70721504"},{"url":"/images/rooms/double-room/13.jpg","alt":"Double Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca70721505","id":"691df6d80dcff6ca70721505"},{"url":"/images/rooms/double-room/14.jpg","alt":"Double Room - Image 14","isPrimary":false,"order":13,"_id":"691df6d80dcff6ca70721506","id":"691df6d80dcff6ca70721506"},{"url":"/images/rooms/double-room/15.jpg","alt":"Double Room - Image 15","isPrimary":false,"order":14,"_id":"691df6d80dcff6ca70721507","id":"691df6d80dcff6ca70721507"},{"url":"/images/rooms/double-room/16.jpg","alt":"Double Room - Image 16","isPrimary":false,"order":15,"_id":"691df6d80dcff6ca70721508","id":"691df6d80dcff6ca70721508"},{"url":"/images/rooms/double-room/17.jpg","alt":"Double Room - Image 17","isPrimary":false,"order":16,"_id":"691df6d80dcff6ca70721509","id":"691df6d80dcff6ca70721509"},{"url":"/images/rooms/double-room/18.jpg","alt":"Double Room - Image 18","isPrimary":false,"order":17,"_id":"691df6d80dcff6ca7072150a","id":"691df6d80dcff6ca7072150a"},{"url":"/images/rooms/double-room/19.jpg","alt":"Double Room - Image 19","isPrimary":false,"order":18,"_id":"691df6d80dcff6ca7072150b","id":"691df6d80dcff6ca7072150b"},{"url":"/images/rooms/double-room/20.jpg","alt":"Double Room - Image 20","isPrimary":false,"order":19,"_id":"691df6d80dcff6ca7072150c","id":"691df6d80dcff6ca7072150c"},{"url":"/images/rooms/double-room/21.jpg","alt":"Double Room - Image 21","isPrimary":false,"order":20,"_id":"691df6d80dcff6ca7072150d","id":"691df6d80dcff6ca7072150d"},{"url":"/images/rooms/double-room/22.jpg","alt":"Double Room - Image 22","isPrimary":false,"order":21,"_id":"691df6d80dcff6ca7072150e","id":"691df6d80dcff6ca7072150e"},{"url":"/images/rooms/double-room/23.jpg","alt":"Double Room - Image 23","isPrimary":false,"order":22,"_id":"691df6d80dcff6ca7072150f","id":"691df6d80dcff6ca7072150f"},{"url":"/images/rooms/double-room/24.jpg","alt":"Double Room - Image 24","isPrimary":false,"order":23,"_id":"691df6d80dcff6ca70721510","id":"691df6d80dcff6ca70721510"},{"url":"/images/rooms/double-room/25.jpg","alt":"Double Room - Image 25","isPrimary":false,"order":24,"_id":"691df6d80dcff6ca70721511","id":"691df6d80dcff6ca70721511"},{"url":"/images/rooms/double-room/26.jpg","alt":"Double Room - Image 26","isPrimary":false,"order":25,"_id":"691df6d80dcff6ca70721512","id":"691df6d80dcff6ca70721512"},{"url":"/images/rooms/double-room/27.jpg","alt":"Double Room - Image 27","isPrimary":false,"order":26,"_id":"691df6d80dcff6ca70721513","id":"691df6d80dcff6ca70721513"},{"url":"/images/rooms/double-room/28.jpg","alt":"Double Room - Image 28","isPrimary":false,"order":27,"_id":"691df6d80dcff6ca70721514","id":"691df6d80dcff6ca70721514"},{"url":"/images/rooms/double-room/29.jpg","alt":"Double Room - Image 29","isPrimary":false,"order":28,"_id":"691df6d80dcff6ca70721515","id":"691df6d80dcff6ca70721515"},{"url":"/images/rooms/double-room/30.jpg","alt":"Double Room - Image 30","isPrimary":false,"order":29,"_id":"691df6d80dcff6ca70721516","id":"691df6d80dcff6ca70721516"},{"url":"/images/rooms/double-room/31.jpg","alt":"Double Room - Image 31","isPrimary":false,"order":30,"_id":"691df6d80dcff6ca70721517","id":"691df6d80dcff6ca70721517"},{"url":"/images/rooms/double-room/32.jpg","alt":"Double Room - Image 32","isPrimary":false,"order":31,"_id":"691df6d80dcff6ca70721518","id":"691df6d80dcff6ca70721518"},{"url":"/images/rooms/double-room/33.jpg","alt":"Double Room - Image 33","isPrimary":false,"order":32,"_id":"691df6d80dcff6ca70721519","id":"691df6d80dcff6ca70721519"}],"features":["WiFi","TV","AC","Minibar","Safe","City View","Workspace","Balcony"],"metaTitle":"Double Rooms - Old Vine Hotel","metaDescription":"Spacious double rooms with elegant furnishings and stunning views at Old Vine Hotel.","isActive":true,"displayOrder":2,"roomCount":0,"createdAt":"2025-11-19T16:32:56.477Z","updatedAt":"2025-11-19T16:56:56.709Z","__v":1,"primaryImage":"/images/rooms/double-room/01.jpg","imageCount":33,"id":"691df138be65fb0965bbaa4b","rooms":[]}}} \ No newline at end of file diff --git a/client/build/static-data/room-category-single-room.json b/client/build/static-data/room-category-single-room.json new file mode 100644 index 0000000..d8d6209 --- /dev/null +++ b/client/build/static-data/room-category-single-room.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"priceRange":{"min":0,"max":0},"_id":"691df138be65fb0965bbaa45","name":"Single Room","slug":"single-room","description":"Comfortable single rooms perfect for solo travelers. Each room is thoughtfully designed with modern amenities and traditional Damascene touches.","shortDescription":"Perfect for solo travelers with modern amenities","images":[{"url":"/images/rooms/single-room/01.jpg","alt":"Single Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca707214e7","id":"691df6d80dcff6ca707214e7"},{"url":"/images/rooms/single-room/02.jpg","alt":"Single Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca707214e8","id":"691df6d80dcff6ca707214e8"},{"url":"/images/rooms/single-room/03.jpg","alt":"Single Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca707214e9","id":"691df6d80dcff6ca707214e9"},{"url":"/images/rooms/single-room/04.jpg","alt":"Single Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca707214ea","id":"691df6d80dcff6ca707214ea"},{"url":"/images/rooms/single-room/05.jpg","alt":"Single Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca707214eb","id":"691df6d80dcff6ca707214eb"},{"url":"/images/rooms/single-room/06.jpg","alt":"Single Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca707214ec","id":"691df6d80dcff6ca707214ec"},{"url":"/images/rooms/single-room/07.jpg","alt":"Single Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca707214ed","id":"691df6d80dcff6ca707214ed"},{"url":"/images/rooms/single-room/08.jpg","alt":"Single Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca707214ee","id":"691df6d80dcff6ca707214ee"},{"url":"/images/rooms/single-room/09.jpg","alt":"Single Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca707214ef","id":"691df6d80dcff6ca707214ef"},{"url":"/images/rooms/single-room/10.jpg","alt":"Single Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca707214f0","id":"691df6d80dcff6ca707214f0"},{"url":"/images/rooms/single-room/11.jpg","alt":"Single Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca707214f1","id":"691df6d80dcff6ca707214f1"},{"url":"/images/rooms/single-room/12.jpg","alt":"Single Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca707214f2","id":"691df6d80dcff6ca707214f2"},{"url":"/images/rooms/single-room/13.jpg","alt":"Single Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca707214f3","id":"691df6d80dcff6ca707214f3"}],"features":["WiFi","TV","AC","Minibar","Safe","City View"],"metaTitle":"Single Rooms - Old Vine Hotel","metaDescription":"Comfortable single rooms perfect for solo travelers at Old Vine Hotel in Damascus.","isActive":true,"displayOrder":1,"roomCount":0,"createdAt":"2025-11-19T16:32:56.473Z","updatedAt":"2025-11-19T16:56:56.701Z","__v":1,"primaryImage":"/images/rooms/single-room/01.jpg","imageCount":13,"id":"691df138be65fb0965bbaa45","rooms":[]}}} \ No newline at end of file diff --git a/client/build/static-data/room-category-suite-room.json b/client/build/static-data/room-category-suite-room.json new file mode 100644 index 0000000..5c36692 --- /dev/null +++ b/client/build/static-data/room-category-suite-room.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"priceRange":{"min":0,"max":0},"_id":"691df138be65fb0965bbaa4e","name":"Suite Room","slug":"suite-room","description":"Luxurious suite rooms offering separate living areas, premium amenities, and exclusive services. Perfect for extended stays or special occasions.","shortDescription":"Luxurious suites with separate living areas and premium amenities","images":[{"url":"/images/rooms/suite-room/01.jpg","alt":"Suite Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca7072151c","id":"691df6d80dcff6ca7072151c"},{"url":"/images/rooms/suite-room/02.jpg","alt":"Suite Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca7072151d","id":"691df6d80dcff6ca7072151d"},{"url":"/images/rooms/suite-room/03.jpg","alt":"Suite Room - Image 3","isPrimary":false,"order":2,"_id":"691df6d80dcff6ca7072151e","id":"691df6d80dcff6ca7072151e"},{"url":"/images/rooms/suite-room/04.jpg","alt":"Suite Room - Image 4","isPrimary":false,"order":3,"_id":"691df6d80dcff6ca7072151f","id":"691df6d80dcff6ca7072151f"},{"url":"/images/rooms/suite-room/05.jpg","alt":"Suite Room - Image 5","isPrimary":false,"order":4,"_id":"691df6d80dcff6ca70721520","id":"691df6d80dcff6ca70721520"},{"url":"/images/rooms/suite-room/06.jpg","alt":"Suite Room - Image 6","isPrimary":false,"order":5,"_id":"691df6d80dcff6ca70721521","id":"691df6d80dcff6ca70721521"},{"url":"/images/rooms/suite-room/07.jpg","alt":"Suite Room - Image 7","isPrimary":false,"order":6,"_id":"691df6d80dcff6ca70721522","id":"691df6d80dcff6ca70721522"},{"url":"/images/rooms/suite-room/08.jpg","alt":"Suite Room - Image 8","isPrimary":false,"order":7,"_id":"691df6d80dcff6ca70721523","id":"691df6d80dcff6ca70721523"},{"url":"/images/rooms/suite-room/09.jpg","alt":"Suite Room - Image 9","isPrimary":false,"order":8,"_id":"691df6d80dcff6ca70721524","id":"691df6d80dcff6ca70721524"},{"url":"/images/rooms/suite-room/10.jpg","alt":"Suite Room - Image 10","isPrimary":false,"order":9,"_id":"691df6d80dcff6ca70721525","id":"691df6d80dcff6ca70721525"},{"url":"/images/rooms/suite-room/11.jpg","alt":"Suite Room - Image 11","isPrimary":false,"order":10,"_id":"691df6d80dcff6ca70721526","id":"691df6d80dcff6ca70721526"},{"url":"/images/rooms/suite-room/12.jpg","alt":"Suite Room - Image 12","isPrimary":false,"order":11,"_id":"691df6d80dcff6ca70721527","id":"691df6d80dcff6ca70721527"},{"url":"/images/rooms/suite-room/13.jpg","alt":"Suite Room - Image 13","isPrimary":false,"order":12,"_id":"691df6d80dcff6ca70721528","id":"691df6d80dcff6ca70721528"}],"features":["WiFi","TV","AC","Minibar","Safe","City View","Workspace","Balcony","Jacuzzi","Terrace"],"metaTitle":"Suite Rooms - Old Vine Hotel","metaDescription":"Luxurious suite rooms with separate living areas at Old Vine Hotel in Damascus.","isActive":true,"displayOrder":3,"roomCount":0,"createdAt":"2025-11-19T16:32:56.478Z","updatedAt":"2025-11-19T16:56:56.713Z","__v":1,"primaryImage":"/images/rooms/suite-room/01.jpg","imageCount":13,"id":"691df138be65fb0965bbaa4e","rooms":[]}}} \ No newline at end of file diff --git a/client/build/static-data/room-category-twin-room.json b/client/build/static-data/room-category-twin-room.json new file mode 100644 index 0000000..c53097d --- /dev/null +++ b/client/build/static-data/room-category-twin-room.json @@ -0,0 +1 @@ +{"success":true,"data":{"category":{"priceRange":{"min":0,"max":0},"_id":"691df138be65fb0965bbaa51","name":"Twin Room","slug":"twin-room","description":"Comfortable twin rooms with two separate beds, ideal for friends or family traveling together. Features all modern amenities in a traditional setting.","shortDescription":"Comfortable rooms with two beds, perfect for friends or family","images":[{"url":"/images/rooms/twin-room/01.jpg","alt":"Twin Room - Image 1","isPrimary":true,"order":0,"_id":"691df6d80dcff6ca7072152b","id":"691df6d80dcff6ca7072152b"},{"url":"/images/rooms/twin-room/02.jpg","alt":"Twin Room - Image 2","isPrimary":false,"order":1,"_id":"691df6d80dcff6ca7072152c","id":"691df6d80dcff6ca7072152c"}],"features":["WiFi","TV","AC","Minibar","Safe","City View"],"metaTitle":"Twin Rooms - Old Vine Hotel","metaDescription":"Comfortable twin rooms with two separate beds at Old Vine Hotel.","isActive":true,"displayOrder":4,"roomCount":0,"createdAt":"2025-11-19T16:32:56.480Z","updatedAt":"2025-11-19T16:56:56.715Z","__v":1,"primaryImage":"/images/rooms/twin-room/01.jpg","imageCount":2,"id":"691df138be65fb0965bbaa51","rooms":[]}}} \ No newline at end of file diff --git a/client/build/static/css/main.d82e9c4b.css b/client/build/static/css/main.d82e9c4b.css new file mode 100644 index 0000000..05f96c9 --- /dev/null +++ b/client/build/static/css/main.d82e9c4b.css @@ -0,0 +1,9 @@ +@font-face{font-family:swiper-icons;font-style:normal;font-weight:400;src:url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA")}:root{--swiper-theme-color:#007aff}:host{display:block;margin-left:auto;margin-right:auto;position:relative;z-index:1}.swiper{display:block;list-style:none;margin-left:auto;margin-right:auto;overflow:hidden;padding:0;position:relative;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{box-sizing:initial;display:flex;height:100%;position:relative;transition-property:transform;transition-timing-function:ease;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);width:100%;z-index:1}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{display:block;flex-shrink:0;height:100%;position:relative;transition-property:transform;width:100%}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0)}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{-ms-overflow-style:none;overflow:auto;scrollbar-width:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:"";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-start:var(--swiper-centered-offset-before);margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-before:var(--swiper-centered-offset-before);margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{height:var(--swiper-centered-offset-after);min-width:1px;width:100%}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:10}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(0deg,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,#00000080,#0000)}.swiper-lazy-preloader{border:4px solid #007aff;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top:4px solid #0000;box-sizing:border-box;height:42px;left:50%;margin-left:-21px;margin-top:-21px;position:absolute;top:50%;transform-origin:50%;width:42px;z-index:10}.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader,.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s linear infinite}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{align-items:center;color:var(--swiper-theme-color);color:var(--swiper-navigation-color,var(--swiper-theme-color));cursor:pointer;display:flex;height:44px;height:var(--swiper-navigation-size);justify-content:center;margin-top:-22px;margin-top:calc(0px - var(--swiper-navigation-size)/2);position:absolute;top:50%;top:var(--swiper-navigation-top-offset,50%);width:27px;width:calc(var(--swiper-navigation-size)/44*27);z-index:10}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{cursor:auto;opacity:.35;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{cursor:auto;opacity:0;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{height:100%;object-fit:contain;transform-origin:center;width:100%}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-lock{display:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:44px;font-size:var(--swiper-navigation-size);font-variant:normal;letter-spacing:0;line-height:1;text-transform:none!important}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:"prev"}.swiper-button-next,.swiper-rtl .swiper-button-prev{left:auto;right:10px;right:var(--swiper-navigation-sides-offset,10px)}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:"next"}.swiper-free-mode>.swiper-wrapper{margin:0 auto;transition-timing-function:ease-out} + +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{height:1px;left:-100000px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{word-wrap:break-word;box-sizing:border-box;height:100%;line-height:1.42;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap}.ql-editor>*{cursor:text}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;margin:0;padding:0}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li:before,.ql-editor ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-increment:list-0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow .ql-toolbar:after,.ql-snow.ql-toolbar:after{clear:both;content:"";display:table}.ql-snow .ql-toolbar button,.ql-snow.ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow .ql-toolbar button svg,.ql-snow.ql-toolbar button svg{float:left;height:100%}.ql-snow .ql-toolbar button:active:hover,.ql-snow.ql-toolbar button:active:hover{outline:none}.ql-snow .ql-toolbar input.ql-image[type=file],.ql-snow.ql-toolbar input.ql-image[type=file]{display:none}.ql-snow .ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar button.ql-active,.ql-snow .ql-toolbar button:focus,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar button.ql-active,.ql-snow.ql-toolbar button:focus,.ql-snow.ql-toolbar button:hover{color:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill{fill:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter{stroke:#06c}@media (pointer:coarse){.ql-snow .ql-toolbar button:hover:not(.ql-active),.ql-snow.ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow,.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:"";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-stroke.ql-thin,.ql-snow .ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor pre{margin-bottom:5px;margin-top:5px;padding:5px 10px;white-space:pre-wrap}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;padding:2px 4px;width:24px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid #0000;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{margin-top:-9px;position:absolute;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-item:before,.ql-snow .ql-picker.ql-header .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]:before{content:"Heading 1"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]:before{content:"Heading 2"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]:before{content:"Heading 3"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]:before{content:"Heading 4"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]:before{content:"Heading 5"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]:before{content:"Heading 6"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-item:before,.ql-snow .ql-picker.ql-font .ql-picker-label:before{content:"Sans Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before{content:"Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before{content:"Monospace"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-item:before,.ql-snow .ql-picker.ql-size .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before{content:"Small"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before{content:"Large"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before{content:"Huge"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid #0000}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid #0000;box-shadow:0 2px 8px #0003}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label,.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip:before{content:"Visit URL:";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{border:1px solid #ccc;display:none;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:"Edit";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove:before{content:"Remove";margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0;content:"Save";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]:before{content:"Enter link:"}.ql-snow .ql-tooltip[data-mode=formula]:before{content:"Enter formula:"}.ql-snow .ql-tooltip[data-mode=video]:before{content:"Enter video:"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fefefe;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.6}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f4fbf8}::-webkit-scrollbar-thumb{background:#1f423c;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#2b5a52}.fade-in{animation:fadeIn .6s ease-in-out}.slide-up{animation:slideUp .8s ease-out}.scale-in{animation:scaleIn .5s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.text-gradient{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,#8b4513,#d4af37);-webkit-background-clip:text;background-clip:text}.glass-effect{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff40;border:1px solid #fff3}.hover-lift{transition:transform .3s ease,box-shadow .3s ease}.hover-lift:hover{box-shadow:0 8px 30px #00000026;transform:translateY(-4px)} +/*# sourceMappingURL=main.d82e9c4b.css.map*/ \ No newline at end of file diff --git a/client/build/static/js/main.38102cbe.js b/client/build/static/js/main.38102cbe.js new file mode 100644 index 0000000..ef638cc --- /dev/null +++ b/client/build/static/js/main.38102cbe.js @@ -0,0 +1,3 @@ +/*! For license information please see main.38102cbe.js.LICENSE.txt */ +(()=>{var e={14:e=>{e.exports=function(){return!1}},39:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(1100)},75:(e,t,n)=>{"use strict";n.d(t,{B:()=>i,t:()=>o});var r=console;function o(){return r}function i(e){r=e}},149:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.flattenNames=void 0;var r=s(n(620)),o=s(n(840)),i=s(n(2322)),a=s(n(3411));function s(e){return e&&e.__esModule?e:{default:e}}var l=t.flattenNames=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return(0,a.default)(t,function(t){Array.isArray(t)?e(t).map(function(e){return n.push(e)}):(0,i.default)(t)?(0,o.default)(t,function(e,t){!0===e&&n.push(t),n.push(t+"-"+e)}):(0,r.default)(t)&&n.push(t)}),n};t.default=l},219:(e,t,n)=>{"use strict";var r=n(3763),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?a:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=a;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var a=u(n);d&&(a=a.concat(d(n)));for(var s=l(t),m=l(n),v=0;v{"use strict";n.d(t,{m:()=>a});var r=n(5540),o=n(1422),i=n(8870),a=new(function(e){function t(){var t;return(t=e.call(this)||this).setup=function(e){var t;if(!i.S$&&(null==(t=window)?void 0:t.addEventListener)){var n=function(){return e()};return window.addEventListener("visibilitychange",n,!1),window.addEventListener("focus",n,!1),function(){window.removeEventListener("visibilitychange",n),window.removeEventListener("focus",n)}}},t}(0,r.A)(t,e);var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){var e;this.hasListeners()||(null==(e=this.cleanup)||e.call(this),this.cleanup=void 0)},n.setEventListener=function(e){var t,n=this;this.setup=e,null==(t=this.cleanup)||t.call(this),this.cleanup=e(function(e){"boolean"===typeof e?n.setFocused(e):n.onFocus()})},n.setFocused=function(e){this.focused=e,e&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(e){e()})},n.isFocused=function(){return"boolean"===typeof this.focused?this.focused:"undefined"===typeof document||[void 0,"visible","prerender"].includes(document.visibilityState)},t}(o.Q))},310:(e,t,n)=>{var r=n(1817),o=n(5990),i=n(6140);e.exports=function(e){return"function"!=typeof e.constructor||i(e)?{}:r(o(e))}},396:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},438:(e,t,n)=>{var r=n(2622);e.exports=function(e){return r(this,e).get(e)}},449:(e,t,n)=>{var r=n(6924),o=n(2761);e.exports=function(e){return o(e)&&"[object Set]"==r(e)}},457:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r.A});var r=n(7868)},474:(e,t,n)=>{var r=n(3204),o=n(8122),i=n(6571);e.exports=function(e){return i(e)?r(e,!0):o(e)}},528:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),h=Symbol.for("react.view_transition"),m=Symbol.for("react.client.reference");function v(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case o:case a:case i:case u:case d:case h:return e;default:switch(e=e&&e.$$typeof){case l:case c:case f:case p:case s:return e;default:return t}}case r:return t}}}t.vM=c,t.lD=p},579:(e,t,n)=>{"use strict";e.exports=n(1153)},620:(e,t,n)=>{var r=n(6913),o=n(4052),i=n(2761);e.exports=function(e){return"string"==typeof e||!o(e)&&i(e)&&"[object String]"==r(e)}},705:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},726:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},840:(e,t,n)=>{var r=n(4664),o=n(5111);e.exports=function(e,t){return e&&r(e,o(t))}},869:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(5043);var r=n(3290),o=n(579);function i(e){const{styles:t,defaultTheme:n={}}=e,i="function"===typeof t?e=>{return t(void 0===(r=e)||null===r||0===Object.keys(r).length?n:e);var r}:t;return(0,o.jsx)(r.mL,{styles:i})}},914:(e,t,n)=>{var r=n(9841);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},918:(e,t,n)=>{"use strict";function r(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}n.d(t,{A:()=>r})},950:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(3468).A},1069:(e,t,n)=>{var r=n(8541);e.exports=function(e){return null==e?"":r(e)}},1100:(e,t,n)=>{"use strict";n.r(t),n.d(t,{capitalize:()=>o.A,createChainedFunction:()=>i,createSvgIcon:()=>a.A,debounce:()=>s.A,deprecatedPropType:()=>l,isMuiElement:()=>c.A,ownerDocument:()=>u.A,ownerWindow:()=>d.A,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>w,unstable_useEnhancedEffect:()=>h.A,unstable_useId:()=>m,unsupportedProp:()=>v,useControlled:()=>g.A,useEventCallback:()=>y.A,useForkRef:()=>b.A,useIsFocusVisible:()=>x.A});var r=n(9386),o=n(6803);const i=n(2456).A;var a=n(9662),s=n(950);const l=function(e,t){return()=>null};var c=n(7328),u=n(2427),d=n(6078);const p=function(e,t){return()=>null};const f=n(6564).A;var h=n(5013);const m=n(5844).A;const v=function(e,t,n,r,o){return null};var g=n(5420),y=n(3319),b=n(5849),x=n(3574);const w={configure:e=>{r.A.configure(e)}}},1104:(e,t,n)=>{var r=n(6614),o=n(8673);e.exports=function(e,t){return e&&r(t,o(t),e)}},1143:(e,t,n)=>{var r=n(3028)(Object.keys,Object);e.exports=r},1153:(e,t,n)=>{"use strict";var r=n(5043),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,r)&&!l.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:s.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},1268:(e,t,n)=>{var r=n(5428),o=n(7574),i=n(6832),a=i&&i.isTypedArray,s=a?o(a):r;e.exports=s},1295:(e,t,n)=>{var r=n(9812),o=r?r.prototype:void 0,i=o?o.valueOf:void 0;e.exports=function(e){return i?Object(i.call(e)):{}}},1310:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},1340:(e,t,n)=>{var r=n(3211);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},1422:(e,t,n)=>{"use strict";n.d(t,{Q:()=>r});var r=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(e){var t=this,n=e||function(){};return this.listeners.push(n),this.onSubscribe(),function(){t.listeners=t.listeners.filter(function(e){return e!==n}),t.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}()},1475:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(7123);const o=e=>(0,r.A)(e)&&"classes"!==e},1497:(e,t,n)=>{"use strict";var r=n(3218);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},1516:(e,t,n)=>{var r=n(2929);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},1629:(e,t,n)=>{var r=n(6913),o=n(6686);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},1668:(e,t,n)=>{"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,{A:()=>r})},1714:(e,t,n)=>{var r=n(1340);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},1722:(e,t,n)=>{"use strict";n.d(t,{Rk:()=>r,SF:()=>o,sk:()=>i});function r(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},i=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var i=t;do{e.insert(t===i?"."+r:"",i,e.sheet,!0),i=i.next}while(void 0!==i)}}},1775:(e,t,n)=>{var r=n(5654);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},1782:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(5043),o=n(4440);const i=function(e){const t=r.useRef(e);return(0,o.A)(()=>{t.current=e}),r.useRef(function(){return(0,t.current)(...arguments)}).current}},1817:(e,t,n)=>{var r=n(6686),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=i},1844:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},1946:(e,t,n)=>{var r=n(1340);e.exports=function(e){return r(this.__data__,e)>-1}},1980:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{"use strict";n.d(t,{j:()=>o});var r=n(8870),o=new(function(){function e(){this.queue=[],this.transactions=0,this.notifyFn=function(e){e()},this.batchNotifyFn=function(e){e()}}var t=e.prototype;return t.batch=function(e){var t;this.transactions++;try{t=e()}finally{this.transactions--,this.transactions||this.flush()}return t},t.schedule=function(e){var t=this;this.transactions?this.queue.push(e):(0,r.G6)(function(){t.notifyFn(e)})},t.batchCalls=function(e){var t=this;return function(){for(var n=arguments.length,r=new Array(n),o=0;o{var r=n(7937)(n(6552),"Set");e.exports=r},2074:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}},2154:(e,t,n)=>{var r=n(5575),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},2322:(e,t,n)=>{var r=n(6913),o=n(5990),i=n(2761),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!i(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=c.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==u}},2372:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>i});var r=n(9386);const o={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function i(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Mui";const i=o[t];return i?"".concat(n,"-").concat(i):"".concat(r.A.generate(e),"-").concat(t)}},2427:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(1668).A},2456:(e,t,n)=>{"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;nnull==t?e:function(){for(var n=arguments.length,r=new Array(n),o=0;o{})}n.d(t,{A:()=>r})},2497:(e,t,n)=>{"use strict";var r=n(4994);t.A=void 0;var o=r(n(39)),i=n(579);t.A=(0,o.default)((0,i.jsx)("path",{d:"M6.23 20.23 8 22l10-10L8 2 6.23 3.77 14.46 12z"}),"ArrowForwardIos")},2532:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(2372);function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Mui";const o={};return t.forEach(t=>{o[t]=(0,r.Ay)(e,t,n)}),o}},2587:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{var r=n(4052),o=n(9841),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(a.test(e)||!i.test(e)||null!=t&&e in Object(t))}},2622:(e,t,n)=>{var r=n(705);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},2662:(e,t,n)=>{var r=n(5575);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},2730:(e,t,n)=>{"use strict";var r=n(5043),o=n(8853);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n