chris 699c5cbaa1 Fix HEIC crash: skip unsupported images gracefully
Sharp in this container lacks HEIF support, causing the entire form
submission to fail when someone uploads a HEIC file. Wrap each file
conversion in try/catch so unsupported formats are skipped with a
warning and the message still goes through.

Also remove HEIC from the advertised accepted formats in the UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 21:44:37 -04:00

186 lines
8.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<script defer data-domain="beachpartyballoons.com" src="https://metrics.beachpartyballoons.com/js/script.hash.outbound-links.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="apple-touch-icon" sizes="180x180" href="../assets/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../assets/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../assets/favicon/favicon-16x16.png">
<link rel="manifest" href="../assets/favicon/site.webmanifest">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contact Us — Beach Party Balloons</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Autour+One&family=Mogra&family=Rubik+Glitch&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="/nav.js" defer></script>
<meta name="description" content="Get in touch with Beach Party Balloons in Milford, CT. Send a message, upload inspiration photos, and we'll plan your perfect balloon arrangement.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Beach Party Balloons">
<meta property="og:title" content="Contact Us — Beach Party Balloons">
<meta property="og:description" content="Get in touch with Beach Party Balloons in Milford, CT. Send a message, upload inspiration photos, and we'll plan your perfect balloon arrangement.">
<meta property="og:url" content="https://beachpartyballoons.com/contact/">
<meta property="og:image" content="https://beachpartyballoons.com/assets/logo/BeachPartyBalloons-logo.webp">
<meta property="og:image:alt" content="Beach Party Balloons">
<meta name="twitter:card" content="summary_large_image">
</head>
<body>
<div id="site-nav"></div>
<button onclick="topFunction()" class="has-text-dark" id="top" title="Go to top">Top</button>
<section class="contact-hero">
<h1 class="is-size-2 has-text-weight-bold">Contact Us</h1>
<p class="is-size-5 mt-2">Have questions or ready to plan your event? We'd love to hear from you.</p>
</section>
<div class="contact-tiles">
<div class="contact-tile">
<i class="fas fa-map-marker-alt"></i>
<div>
<div class="contact-tile-label">Visit Us</div>
<a target="_blank" href="https://maps.app.goo.gl/gRk6NztgMRUsSVJf9">554 Boston Post Road<br>Milford, CT 06460</a>
</div>
</div>
<div class="contact-tile">
<i class="fas fa-phone"></i>
<div>
<div class="contact-tile-label">Call Us</div>
<a href="tel:2032835626">203.283.5626</a>
</div>
</div>
<div class="contact-tile">
<i class="fas fa-clock"></i>
<div>
<div class="contact-tile-label">Shop Hours</div>
<p id="status"></p>
<p id="hours-tuesday-friday">Tuesday Friday: 10:005:00</p>
<p id="hours-saturday">Saturday: 9:003:00</p>
<p id="hours-sunday-monday">Sunday Monday: Closed</p>
</div>
</div>
</div>
<div class="form-container">
<h2 class="is-size-4 has-text-centered mb-4">Send a Message</h2>
<form id="contactForm" novalidate>
<!-- Honeypot: hidden from humans, filled by bots -->
<div style="display:none;" aria-hidden="true">
<input type="text" name="website" tabindex="-1" autocomplete="off">
</div>
<div class="columns is-mobile">
<div class="column">
<div class="field">
<label class="label">First name <span class="has-text-danger">*</span></label>
<div class="control">
<input class="input" type="text" name="firstName" placeholder="Jane" required autocomplete="given-name">
</div>
<p class="help is-danger" id="err-firstName" style="display:none;"></p>
</div>
</div>
<div class="column">
<div class="field">
<label class="label">Last name <span class="has-text-danger">*</span></label>
<div class="control">
<input class="input" type="text" name="lastName" placeholder="Smith" required autocomplete="family-name">
</div>
<p class="help is-danger" id="err-lastName" style="display:none;"></p>
</div>
</div>
</div>
<div class="field">
<label class="label">Email <span class="has-text-danger">*</span></label>
<div class="control">
<input class="input" type="email" name="email" placeholder="you@example.com" required autocomplete="email">
</div>
<p class="help is-danger" id="err-email" style="display:none;"></p>
</div>
<div class="field">
<label class="label">Phone Number <span class="has-text-danger">*</span></label>
<div class="control">
<input class="input" type="tel" name="phone" placeholder="(203) 555-0123" required autocomplete="tel">
</div>
<p class="help is-danger" id="err-phone" style="display:none;"></p>
</div>
<div class="columns is-mobile">
<div class="column">
<div class="field">
<label class="label">Event Type</label>
<div class="control">
<div class="select is-fullwidth">
<select name="eventType">
<option value="">Select a type…</option>
<option value="Birthday">Birthday</option>
<option value="Corporate">Corporate</option>
<option value="Wedding">Wedding</option>
<option value="Walk-in">Walk-in</option>
<option value="Other">Other</option>
</select>
</div>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label">Event Date</label>
<div class="control">
<input class="input" type="date" name="eventDate">
</div>
</div>
</div>
</div>
<div class="field">
<label class="label">Message <span class="has-text-danger">*</span></label>
<div class="control">
<textarea class="textarea" name="message" placeholder="Tell us about your event…" rows="4" required></textarea>
</div>
<p class="help is-danger" id="err-message" style="display:none;"></p>
</div>
<div class="field">
<label class="label">Photos <span class="has-text-grey is-size-7">(up to 3 images)</span></label>
<div class="control">
<div id="dropzone">
<p><i class="fas fa-images"></i> Drag &amp; drop photos here, or <span class="has-text-info" style="text-decoration:underline;">browse</span></p>
<p class="is-size-7 has-text-grey mt-1">JPEG · PNG · WebP — max 10 MB each</p>
<input id="photoInput" type="file" name="photos" accept="image/*" multiple style="display:none;">
</div>
<div id="photoPreview"></div>
<p id="photoError" class="help is-danger" style="display:none;">Maximum 3 photos — extras were ignored.</p>
</div>
</div>
<div id="formAlert" class="notification" style="display:none;"></div>
<div class="field">
<altcha-widget
challenge="/api/altcha"
auto="onload"
style="--altcha-color-border: #dbdbdb; --altcha-border-radius: 4px; --altcha-color-text: #363636;"
></altcha-widget>
<p class="help is-danger" id="err-altcha" style="display:none;">Please complete the verification.</p>
</div>
<div class="field">
<div class="control">
<button type="submit" id="submitBtn" class="button is-info is-fullwidth">Send Message</button>
</div>
</div>
</form>
</div>
<div id="site-footer"></div>
<script src="../script.js"></script>
<script src="../easter-egg.js"></script>
<script src="../update.js"></script>
<script src="../contact-form.js"></script>
<script async src="https://cdn.jsdelivr.net/npm/altcha@3.1.0/dist/main/altcha.min.js" type="module"></script>
</body>
</html>