In order to protect the intellectual property rights of AASHTO to its content, AASHTO prohibits the use of any AASHTO content in conjunction with an artificial intelligence tool or program, including the training of models on AASHTO content or the entry of AASHTO content into any AI tool.

.info-box h4 margin-top: 0; color: #667eea;

.alert-error background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb;

if (!request[0]) return res.status(404).json( error: 'Request not found' ); // Configure email transporter const transporter = nodemailer.createTransport( service: 'gmail', auth: user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS ); // Send email await transporter.sendMail( from: '"Hua Hin Hotel" <hotel@huahin.com>', to: email, subject: 'Your Visa Support Letter for Thailand', text: 'Please find attached your visa support letter for your stay in Hua Hin.', attachments: [ filename: 'visa_support_letter.pdf', path: request[0].letter_file_path ] ); // Update status await db.query( 'UPDATE hotel_visa_requests SET visa_letter_status = "sent" WHERE id = ?', [req.params.request_id] ); res.json( success: true, message: 'Visa letter sent to guest email' ); catch (error) console.error(error); res.status(500).json( error: 'Failed to send email' );

@media (max-width: 768px) .visa-support-container padding: 15px;

.form-group margin-bottom: 20px;

const [loading, setLoading] = useState(false); const [message, setMessage] = useState(null);

.info-box background: #f0f4ff; padding: 15px; border-radius: 8px; margin: 20px 0; border-left: 4px solid #667eea;

.form-row grid-template-columns: 1fr; gap: 0;