All JavaScript + Styles


<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>DIYDRY Water Damage Equipment Rental | Florida</title>
<meta name="description" content="DIYDRY Water Damage Equipment Rental. 24/7 delivery and drying equipment."/>
<!-- Social Media Sharing Optimization (Open Graph + Twitter/X Cards) -->
<meta property="og:title" content="DIYDRY Water Damage Equipment Rental | Florida - 24/7 Delivery">
<meta property="og:description" content="Professional DIY water damage equipment rental delivered fast in Palm Coast, Daytona Beach, St. Augustine & surrounding areas. Dehumidifiers, air movers, moisture meters & more. Save thousands vs full restoration companies.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.diydryrental.com/">
<meta property="og:image" content="https://www.diydryrental.com/images/social-preview-1200x630.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="DIYDRY Water Damage Equipment Rental - Dehumidifiers & Air Movers Delivered 24/7">
<meta property="og:site_name" content="DIYDRY Water Damage Equipment Rental">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="DIYDRY Water Damage Equipment Rental | Florida - 24/7 Delivery">
<meta name="twitter:description" content="Professional DIY water damage equipment rental delivered fast in Palm Coast, Daytona Beach, St. Augustine & surrounding areas. Save thousands vs restoration companies.">
<meta name="twitter:image" content="https://www.diydryrental.com/images/social-preview-1200x630.jpg">
<meta name="twitter:image:alt" content="DIYDRY Water Damage Equipment Rental - Professional Drying Gear">
<meta property="og:image:secure_url" content="https://www.diydryrental.com/images/social-preview-1200x630.jpg">
<link rel="canonical" href="https://www.diydryrental.com/">
<!-- LocalBusiness + Reviews Schema Markup -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "DIYDRY Water Damage Equipment Rental",
  "image": "https://www.diydryrental.com/logo.png",
  "telephone": "+13865971132",
  "url": "https://www.diydryrental.com",
  "priceRange": "$$",
  "description": "24/7 emergency water damage equipment rental and delivery in Flagler, Volusia, and St. Johns Counties, Florida. Dehumidifiers, air movers, moisture meters, and more.",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Palm Coast",
    "addressRegion": "FL",
    "postalCode": "32137",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 29.5847,
    "longitude": -81.2079
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
      "opens": "00:00",
      "closes": "23:59"
    }
  ],
  "areaServed": [
    {"@type": "AdministrativeArea", "name": "Flagler County, FL"},
    {"@type": "AdministrativeArea", "name": "Volusia County, FL"},
    {"@type": "AdministrativeArea", "name": "St. Johns County, FL"}
  ],
  "paymentAccepted": "Credit Card, Cash",
  "review": [
    {
      "@type": "Review",
      "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5"},
      "author": {"@type": "Person", "name": "Mike R."},
      "reviewBody": "Called late at night after a pipe burst. Equipment arrived quickly and the thermal scan helped spot hidden moisture. Great value doing it DIY—staff was very helpful.",
      "datePublished": "2025-11-15"
    },
    {
      "@type": "Review",
      "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5"},
      "author": {"@type": "Person", "name": "Sarah T."},
      "reviewBody": "The dehus and fans worked great for our flooded area. Much cheaper than full restoration—would recommend to anyone.",
      "datePublished": "2025-10-22"
    },
    {
      "@type": "Review",
      "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5"},
      "author": {"@type": "Person", "name": "John M."},
      "reviewBody": "Emergency delivery was prompt after storm damage. Easy to use the gear and pickup was simple. Saved a lot compared to hiring a big company—thanks DIYDRY!",
      "datePublished": "2025-09-08"
    }
  ]
}
</script>
<!-- Square Web Payments SDK -->
<script src="https://sandbox.web.squarecdn.com/v1/square.js"></script>
<script src="https://cdn.tailwindcss.com"></script>
<!-- Google Analytics 4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>
<style>
:root{
--primary:#001f3f;
--accent:#0099cc;
--cta:#e07a00;
}
body { color: #111827; }
.cta{
background:linear-gradient(135deg,var(--cta),#f59e0b);
color:white;
transition: all 0.3s ease;
}
.cta:hover {
  background:linear-gradient(135deg,#c2410c,var(--cta));
  transform: translateY(-2px);
}
.card{
background:white;
border-radius:12px;
box-shadow:0 4px 12px rgba(0,0,0,0.1);
border-left:6px solid var(--accent);
border-right:6px solid #b91c1c;
transition: transform 0.2s ease;
padding: 2rem !important; /* Uniform 2rem padding on all cards */
}
.card:hover { transform: translateY(-4px); }
img, iframe { loading: lazy; }
.review-img {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--accent);
}
#add-to-cart-btn {
  background: var(--accent);
  color: white;
  padding: 1rem 1.5rem;
  border-radius: 0.5rem;
  font-weight: 600;
  margin-top: 1rem;
  cursor: pointer;
  min-height: 52px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.3s ease;
}
#add-to-cart-btn:hover { background: #0077aa; }
#mini-cart {
  position: fixed;
  top: 80px;
  right: 20px;
  background: white;
  border: 2px solid var(--accent);
  border-radius: 12px;
  padding: 1.25rem;
  box-shadow: 0 8px 20px rgba(0,0,0,0.12);
  max-width: 340px;
  z-index: 1000;
  display: none;
}
#mini-cart h3 {
  margin: 0 0 1rem;
  color: var(--primary);
}
#cart-items {
  list-style: none;
  padding: 0;
  margin: 0 0 1rem;
}
#cart-items li {
  margin-bottom: 0.75rem;
  font-size: 1rem;
}
#cart-total {
  font-weight: 700;
  color: var(--cta);
}
.cart-icon {
  font-size: 2rem;
  color: var(--primary);
  cursor: pointer;
  transition: color 0.3s;
}
.cart-icon:hover { color: var(--cta); }
.date-input, .form-input {
  width: 100%;
  padding: 0.875rem;
  border: 2px solid var(--accent);
  border-radius: 8px;
  margin-top: 0.5rem;
  font-size: 1rem;
}
.qty-btn {
  background: var(--accent);
  color: white;
  border: none;
  padding: 0.6rem 1.1rem;
  border-radius: 50%;
  cursor: pointer;
  font-weight: 600;
  margin: 0 0.3rem;
  min-width: 48px;
  min-height: 48px;
  transition: background 0.3s;
}
.qty-btn:hover { background: #0077aa; }
.tax-note {
  font-size: 0.875rem;
  color: #4b5563;
  text-align: right;
  margin-top: 0.5rem;
}
#card-container {
  border: 2px solid var(--accent);
  border-radius: 8px;
  padding: 1.25rem;
  min-height: 140px;
  margin: 1.25rem 0;
}
#card-errors {
  color: #dc2626;
  margin-top: 0.75rem;
}
.protection-line {
  background: #f0f9ff;
  padding: 1.25rem;
  border-radius: 10px;
  margin-bottom: 1.75rem;
  text-align: center;
  font-weight: 600;
  color: var(--primary);
}
.protection-line label {
  cursor: pointer;
  padding: 0.75rem;
  min-height: 52px;
  display: flex;
  align-items: center;
}
#mobile-menu {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.75);
  z-index: 9999;
  overflow-y: auto;
  transition: opacity 0.4s ease;
}
#mobile-menu.show {
  display: flex;
  opacity: 1;
}
#mobile-menu ul {
  background: white;
  width: 90%;
  max-width: 360px;
  height: 100%;
  padding: 3rem 2rem;
  list-style: none;
  margin-left: auto;
  box-shadow: -12px 0 30px rgba(0,0,0,0.25);
  transition: transform 0.4s ease;
  transform: translateX(100%);
}
#mobile-menu.show ul {
  transform: translateX(0);
}
#mobile-menu li {
  margin: 1.75rem 0;
  font-size: 1.4rem;
}
#mobile-menu a {
  color: var(--primary);
  text-decoration: none;
  display: block;
  padding: 1rem 0;
}
#mobile-menu a:hover { color: var(--accent); }
.hamburger {
  display: none;
  flex-direction: column;
  justify-content: space-around;
  width: 48px;
  height: 48px;
  cursor: pointer;
  padding: 10px;
}
.hamburger span {
  width: 100%;
  height: 5px;
  background: var(--primary);
  border-radius: 10px;
  transition: all 0.4s;
}
.hamburger.open span:nth-child(1) { transform: rotate(45deg) translate(10px, 10px); }
.hamburger.open span:nth-child(2) { opacity: 0; }
.hamburger.open span:nth-child(3) { transform: rotate(-45deg) translate(9px, -9px); }
@media (max-width: 768px) {
  .hamburger { display: flex; }
  .hidden.md\\:flex { display: none !important; }
  .grid.md\\:grid-cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.25rem; }
  .grid.md\\:grid-cols-3, .grid.md\\:grid-cols-2 { grid-template-columns: 1fr; }
  section { padding-left: 1.25rem; padding-right: 1.25rem; }
  .text-5xl { font-size: 2.5rem; line-height: 1.1; }
  .text-4xl { font-size: 2.25rem; }
  .text-3xl { font-size: 1.875rem; }
  .text-2xl { font-size: 1.5rem; }
  .px-10 { padding-left: 1.75rem; padding-right: 1.75rem; }
  .cta { padding: 1.25rem 2.25rem; font-size: 1.125rem; min-height: 60px; }
  #mini-cart { width: 92%; right: 4%; top: 70px; padding: 1rem; }
  .protection-line { flex-direction: column; gap: 1rem; }
}
@media (min-width: 1024px) {
  .max-w-7xl { max-width: 90rem; }
  .grid.md\\:grid-cols-4 { gap: 1.75rem; }
}
</style>
</head>
<body class="bg-gray-50 font-sans antialiased">
<!-- TOP BAR -->
<div class="bg-red-700 text-white text-center py-4 font-bold text-xl flex items-center justify-center gap-4 shadow-md">
⚠️ 24/7 EMERGENCY • CALL 386-597-1132 ⚠️
</div>
<!-- NAV with Hamburger -->
<nav class="bg-white shadow-md sticky top-0 z-50">
<div class="max-w-7xl mx-auto px-6 py-5 flex justify-between items-center">
<div class="flex items-center gap-4">
<svg width="44" height="44" viewBox="0 0 52 52" fetchpriority="high">
<path d="M26 6C18 6 10 14 10 26C10 38 26 48 26 48C26 48 42 38 42 26C42 14 34 6 26 6Z" fill="#0099cc"/>
</svg>
<div>
<div class="text-2xl font-extrabold text-[var(--primary)]">DIYDRY</div>
<div class="text-base font-semibold text-gray-600">Water Damage Equipment Rental</div>
</div>
</div>
<div class="hamburger" id="hamburger">
  <span></span>
  <span></span>
  <span></span>
</div>
<div class="hidden md:flex gap-10 font-semibold text-lg items-center text-[var(--primary)]">
<a href="#home" class="hover:text-[var(--accent)] transition">Home</a>
<a href="#equipment" class="hover:text-[var(--accent)] transition">Equipment</a>
<a href="#book" class="hover:text-[var(--accent)] transition">Book Now</a>
<a href="#calculator" class="hover:text-[var(--accent)] transition">Calculator</a>
<a href="#contact" class="hover:text-[var(--accent)] transition">Contact</a>
</div>
<div class="flex items-center gap-8">
<div class="text-right hidden md:block">
<div class="text-sm text-gray-600">24/7 Emergency</div>
<div class="text-2xl font-extrabold text-red-700">386-597-1132</div>
</div>
<a href="#equipment" class="cart-icon" title="View Cart & Reserve">
  🛒
</a>
</div>
</div>
</nav>
<!-- Mobile Menu Overlay -->
<div id="mobile-menu">
  <div class="flex justify-end p-6">
    <div class="hamburger open" id="close-menu">
      <span></span>
      <span></span>
      <span></span>
    </div>
  </div>
  <ul class="mx-auto">
    <li><a href="#home">Home</a></li>
    <li><a href="#equipment">Equipment</a></li>
    <li><a href="#book">Book Now</a></li>
    <li><a href="#calculator">Calculator</a></li>
    <li><a href="#contact">Contact</a></li>
    <li class="mt-8 text-red-700 text-2xl font-bold">
      <a href="tel:3865971132">CALL 386-597-1132</a>
    </li>
  </ul>
</div>
<!-- HERO -->
<section id="home" class="py-20 text-center px-6 bg-gradient-to-br from-gray-100 to-white">
<h2 class="text-4xl md:text-6xl font-extrabold text-[var(--primary)]">Professional</h2>
<h1 class="text-5xl md:text-6xl font-extrabold text-[var(--primary)] mt-3 leading-tight">
Water Damage Equipment Rental Delivered Fast
</h1>
<p class="text-2xl md:text-3xl mt-8 font-semibold text-gray-800 max-w-4xl mx-auto">
Handle water damage yourself like a pro and save thousands vs restoration companies
</p>
<p class="text-xl md:text-2xl mt-8 font-bold text-[var(--primary)]">
Easy as 1-2-3: We deliver – We set up – We take down / pick up
</p>
<p class="text-xl md:text-2xl mt-6 font-bold text-[var(--accent)]">
No experience needed
</p>
<div class="mt-10 flex flex-col md:flex-row gap-6 justify-center flex-wrap">
<a href="tel:3865971132" class="cta px-12 py-6 text-xl rounded-xl font-bold shadow-lg" fetchpriority="high">
CALL 386-597-1132
</a>
<a href="#calculator" class="border-2 border-[var(--cta)] px-12 py-6 text-xl rounded-xl font-bold text-[var(--cta)] hover:bg-[var(--cta)] hover:text-white transition">
CALCULATE EQUIPMENT
</a>
<a href="#equipment" class="cta px-12 py-6 text-xl rounded-xl font-bold shadow-lg">
RENT NOW
</a>
</div>
</section>
<!-- BULLETS -->
<section class="max-w-7xl mx-auto px-6 py-16">
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
<div class="card p-8">
<p class="font-extrabold text-xl text-[var(--primary)]">FREE THERMAL IMAGING MOISTURE DETECTION SCAN AT DELIVERY</p>
<p class="mt-2 text-gray-700">Detect hidden water damage fast</p>
</div>
<div class="card p-8">
<p class="font-extrabold text-xl text-[var(--primary)]">24/7 WATER EXTRACTION AVAILABLE</p>
<p class="mt-2 text-gray-700">Remove standing water fast before damage spreads</p>
</div>
<div class="card p-8">
<p class="font-extrabold text-xl text-[var(--primary)]">24/7 EMERGENCY DELIVERY</p>
<p class="mt-2 text-gray-700">Get equipment fast when you need it the most</p>
</div>
<div class="card p-8">
<p class="font-extrabold text-xl text-[var(--primary)]">SETUP OPTION AVAILABLE</p>
<p class="mt-2 text-gray-700">We can set up or you can DIY</p>
</div>
<div class="card p-8 md:col-span-2 lg:col-span-3 text-center">
<p class="font-extrabold text-xl text-[var(--primary)]">FRIENDLY HELP + EASY PICKUP</p>
</div>
</div>
</section>
<!-- WHAT WE DO -->
<section class="max-w-6xl mx-auto px-6 py-16">
<div class="card p-10">
<p class="text-2xl font-extrabold text-[var(--primary)]">✔ WHAT WE DO</p>
<p class="mt-4 text-lg text-gray-700">We deliver professional drying equipment. We offer multiple options so you can handle your water damage like a pro while saving money.</p>
<p class="text-2xl font-extrabold mt-10 text-[var(--primary)]">❌ WHAT WE DON’T DO</p>
<p class="mt-4 text-lg text-gray-700">We are not a full-service restoration company charging thousands for insurance jobs.</p>
</div>
</section>
<!-- EQUIPMENT + CALCULATOR + RESERVATION -->
<section id="equipment" class="py-20 px-6 bg-gradient-to-b from-gray-50 to-gray-100">
<h2 class="text-4xl md:text-5xl font-extrabold text-center mb-8 text-[var(--primary)]">Equipment & Reservation</h2>
<p class="text-2xl font-bold text-center mb-10 text-red-700 max-w-3xl mx-auto">Not sure how much equipment you need? Just call – we are here to help</p>
<div class="flex justify-center mb-16">
<a href="tel:3865971132" class="cta px-14 py-7 text-2xl rounded-xl font-bold shadow-xl hover:scale-105 transition-transform">
CALL 386-597-1132 NOW
</a>
</div>
<!-- Calculator at top -->
<div class="max-w-5xl mx-auto mb-20">
  <h3 class="text-3xl font-extrabold text-center mb-8 text-[var(--primary)]">Equipment Calculator</h3>
  <div class="card p-10">
    <div class="mb-8">
      <label class="font-bold text-xl block mb-3 text-[var(--primary)]">Square Footage (Affected Area)</label>
      <input id="area" type="number" class="w-full border-2 border-[var(--accent)] p-5 text-lg rounded-lg" placeholder="Square feet"/>
    </div>
    <div class="grid md:grid-cols-2 gap-6 mb-8">
      <div>
        <label class="font-bold block mb-2 text-lg text-[var(--primary)]">Number of Wall Insets > 18 inches</label>
        <input id="insets-count" type="number" min="0" value="0" class="w-full border-2 border-[var(--accent)] p-5 text-lg rounded-lg" onchange="calc()">
      </div>
      <div>
        <label class="font-bold block mb-2 text-lg text-[var(--primary)]">Number of Wall Offsets > 18 inches</label>
        <input id="offsets-count" type="number" min="0" value="0" class="w-full border-2 border-[var(--accent)] p-5 text-lg rounded-lg" onchange="calc()">
      </div>
    </div>
    <div class="mb-8">
      <label class="font-bold text-xl block mb-3 text-[var(--primary)]">Water Class (S500)</label>
      <div class="border-2 border-[var(--accent)] p-6 rounded-lg">
        <label class="block mb-5 cursor-pointer text-lg"><input type="radio" name="class" value="2"> Class 2</label>
        <label class="block cursor-pointer text-lg"><input type="radio" name="class" value="3"> Class 3</label>
        <p class="text-base mt-6 text-gray-600">
          <strong>Class 2:</strong> Less than 2ft of water wicking up walls.<br><br>
          <strong>Class 3:</strong> Greater than 2ft or overhead saturation.
        </p>
      </div>
    </div>
    <div class="mb-8">
      <label class="font-bold text-xl block mb-3 text-[var(--primary)]">Ceiling Height</label>
      <div class="border-2 border-[var(--accent)] p-6 rounded-lg">
        <label class="block mb-5 cursor-pointer text-lg"><input type="radio" name="ceiling" value="8" checked> 8 Foot</label>
        <label class="block cursor-pointer text-lg"><input type="radio" name="ceiling" value="10"> 10 Foot</label>
      </div>
    </div>
    <button onclick="calc()" class="cta w-full py-6 font-bold text-2xl min-h-[64px] rounded-xl">
      CALCULATE RECOMMENDED EQUIPMENT
    </button>
    <div class="mt-10 text-xl font-bold text-center text-[var(--primary)]" id="result">
      <p class="text-lg font-extrabold mb-4">
        Amount of Equipment Recommended by IICRC S500 Standard
      </p>
    </div>
  </div>
</div>
<!-- Equipment list -->
<div class="grid md:grid-cols-3 lg:grid-cols-4 gap-8 max-w-7xl mx-auto mb-20">
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Dehumidifiers</h3>
<p class="text-gray-600 mt-3 text-base">Removes moisture from air</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$115.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Dehumidifier', 115.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Air Movers (Centrifugal)</h3>
<p class="text-gray-600 mt-3 text-base">High-speed drying fans</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$28.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Air Mover (Centrifugal)', 28.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Axial Air Mover / Fan</h3>
<p class="text-gray-600 mt-3 text-base">Moves large volumes of air for rapid drying</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$35.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Axial Air Mover / Fan', 35.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Professional Non-Destructive Moisture Meters</h3>
<p class="text-gray-600 mt-3 text-base">Measure moisture levels to track drying progress</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$70.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Moisture Meter', 70.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Industrial 3-Stage HEPA Air Scrubber</h3>
<p class="text-gray-600 mt-3 text-base">Air scrubbers remove aerosolized particles that are airborne due to high velocity air movers/fans</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$175.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Air Scrubber', 175.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Wall / Ceiling Cavity Injection Unit</h3>
<p class="text-gray-600 mt-3 text-base">Used to dry unaccessible places like under cabinets, inside wall assemblies, ceilings. Specifically designed to target areas which need high air exchange rates – replace fewer walls and ceilings</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$95.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Cavity Injection Unit', 95.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center">
<h3 class="text-xl font-extrabold text-[var(--primary)]">Hardwood Floor Mat Drying System</h3>
<p class="text-gray-600 mt-3 text-base">Experience faster drying for hardwood floors</p>
<p class="font-bold text-[var(--cta)] mt-4 text-xl">$180.00 / day</p>
<button id="add-to-cart-btn" onclick="addToCart('Hardwood Floor Mat System', 180.00)">Add to Cart</button>
</div>
<div class="card p-8 text-center md:col-span-2 lg:col-span-4 mx-auto" style="max-width: none;">
  <h3 class="text-xl font-extrabold text-[var(--primary)]"><strong>Other Specialized Professional Drying Equipment Available</strong></h3>
  <p class="text-gray-600 mt-3 text-base"><strong>Let us know what you are trying to dry and we will provide the proper tool for you.</strong></p>
</div>
</div>
<!-- Reservation / Checkout Area -->
<div class="max-w-5xl mx-auto mt-16">
  <h3 class="text-4xl font-extrabold text-center mb-10 text-[var(--primary)]">Reserve & Checkout</h3>
  <div class="card p-10">
    <div class="mb-10 grid md:grid-cols-2 gap-8">
      <div>
        <label class="font-bold text-xl block mb-3 text-[var(--primary)]">Start Date</label>
        <input type="date" id="start-date" class="date-input text-lg" required>
      </div>
      <div>
        <label class="font-bold text-xl block mb-3 text-[var(--primary)]">End Date</label>
        <input type="date" id="end-date" class="date-input text-lg" required>
      </div>
    </div>
    <p id="days-display" class="text-center text-gray-700 font-semibold text-xl mb-8">Rental Days: 1 (select dates above)</p>
    <div class="protection-line flex flex-col sm:flex-row justify-center items-center gap-10">
      <label class="inline-flex items-center gap-4 cursor-pointer text-lg">
        <input type="radio" name="damage-protection" value="accept" id="protect-accept" checked onchange="updateFullCartDisplay()">
        <span>Accept 15% Damage Protection Plan</span>
      </label>
      <label class="inline-flex items-center gap-4 cursor-pointer text-lg">
        <input type="radio" name="damage-protection" value="decline" id="protect-decline" onchange="updateFullCartDisplay()">
        <span>Decline</span>
      </label>
    </div>
    <div id="full-cart-items" class="mb-8"></div>
    <div class="text-right mb-8 space-y-2 text-lg">
      <p id="subtotal-display" class="font-bold">Subtotal: $0.00</p>
      <p id="protection-fee-display">Damage Protection (15%): $0.00</p>
      <p id="tax-display">Tax (7%): $0.00</p>
      <p id="full-cart-total" class="text-3xl font-bold text-[var(--cta)] mt-4">Grand Total: $0.00</p>
      <p class="tax-note mt-3">Florida sales tax 7% applied (no additional local surtax in Flagler/Volusia/St. Johns areas)</p>
    </div>
    <form id="checkout-form" class="mb-10 space-y-6">
      <h4 class="text-2xl font-bold mb-6 text-[var(--primary)]">Your Contact & Delivery Info</h4>
      <div>
        <label class="font-bold block mb-2 text-lg">Full Name *</label>
        <input type="text" id="name" class="form-input text-lg" required>
      </div>
      <div>
        <label class="font-bold block mb-2 text-lg">Email *</label>
        <input type="email" id="email" class="form-input text-lg" required>
      </div>
      <div>
        <label class="font-bold block mb-2 text-lg">Phone *</label>
        <input type="tel" id="phone" class="form-input text-lg" required>
      </div>
      <div>
        <label class="font-bold block mb-2 text-lg">Delivery Address *</label>
        <input type="text" id="address" class="form-input text-lg" required placeholder="Street, City, State, ZIP">
      </div>
      <div>
        <label class="font-bold block mb-2 text-lg">Additional Notes / Instructions</label>
        <textarea id="notes" class="form-input text-lg" rows="4" placeholder="e.g. gate code, preferred delivery time"></textarea>
      </div>
    </form>
    <div class="mb-8">
      <label class="font-bold text-xl block mb-3 text-[var(--primary)]">Payment Information</label>
      <div id="card-container"></div>
      <div id="card-errors" role="alert"></div>
    </div>
    <button id="proceed-checkout" class="cta w-full py-6 font-bold text-2xl rounded-xl min-h-[64px]">
      Rent Now - Pay with Square
    </button>
    <p class="text-center text-base text-gray-600 mt-6">
      <strong>Securely pay with Square. <span style="color:#e07a00;">Call 386-597-1132 to confirm delivery schedule.</span></strong>
    </p>
  </div>
</div>
</section>

<!-- HELPFUL HINTS: What to Do and What NOT to Do When You First Discover Water Damage -->
<section class="max-w-6xl mx-auto px-6 py-20 bg-white">
  <h2 class="text-4xl md:text-5xl font-extrabold text-center mb-12 text-[var(--primary)]">Helpful Hints: What to Do and What NOT to Do When You First Discover Water Damage</h2>
  
  <div class="grid md:grid-cols-2 gap-10">
    <!-- WHAT TO DO Column -->
    <div class="card p-10">
      <h3 class="text-3xl font-extrabold text-green-600 mb-6 flex items-center gap-3">
        ✅ WHAT TO DO IMMEDIATELY
      </h3>
      <p class="text-lg text-gray-800 mb-4 font-semibold">(to minimize damage and make water damage cleanup faster and cheaper)</p>
      <ul class="space-y-4 text-lg text-gray-700 list-disc pl-6">
        <li>Shut off the water source right away if safe (main valve, appliance supply line, etc.) to stop the flood from getting worse.</li>
        <li>Turn off electricity at the breaker panel for any affected areas—safety first before any water removal or extraction.</li>
        <li>Use disposable gloves and boots when handling wet materials to avoid spreading contamination during flood cleanup.</li>
        <li>Remove wet contents quickly from cabinets, drawers, and closets — books, papers, and fabrics absorb water fast and can cause permanent damage or odors.</li>
        <li>Move furniture, rugs, and valuables to dry areas and wipe them down to prevent permanent damage during water cleanup.</li>
        <li>Open windows and doors (if weather allows and the humidity outside is not higher than inside).</li>
        <li>Run rented dehumidifiers and air movers continuously and position air movers to create cross-flow across wet surfaces — this is key for effective water removal, extraction, and drying.</li>
        <li>Rent professional-grade drying equipment early (dehumidifiers, air movers, moisture meters) to control humidity and speed up water damage restoration—often saves thousands compared to full-service companies.</li>
      </ul>
    </div>

    <!-- WHAT NOT TO DO Column -->
    <div class="card p-10">
      <h3 class="text-3xl font-extrabold text-red-600 mb-6 flex items-center gap-3">
        ❌ WHAT NOT TO DO
      </h3>
      <p class="text-lg text-gray-800 mb-4 font-semibold">(common mistakes that make water damage cleanup harder and more expensive)</p>
      <ul class="space-y-4 text-lg text-gray-700 list-disc pl-6">
        <li>Do not enter standing water if power is still on—risk of electric shock.</li>
        <li>Do not use regular household vacuums for water removal/extraction—they’re not designed for it and you can risk electric shock by using improper tools.</li>
        <li>Do not assume everything is dry just because it looks dry — wood, drywall, and insulation can hold deep moisture; always verify with rented moisture meters.</li>
        <li>Do not rely only on box fans or open windows without commercial-sized dehumidifiers—high humidity slows drying and can cause secondary water damage.</li>
        <li>Do not use bleach on porous materials (drywall, wood, carpet)—it doesn’t kill mold effectively and can damage surfaces. Instead, inquire about our water damage disinfectant option.</li>
        <li>Do not delay renting drying equipment—the longer moisture sits, the more extensive (and costly) the water damage restoration becomes.</li>
      </ul>
    </div>
  </div>

  <div class="mt-12 text-center bg-blue-50 p-8 rounded-xl border border-[var(--accent)]">
    <p class="text-xl font-bold text-[var(--primary)] mb-4">
      Quick tip from your local water damage equipment rental team:
    </p>
    <p class="text-lg text-gray-800 max-w-4xl mx-auto">
      Acting fast with rented professional tools (high-capacity dehumidifiers, powerful air movers, accurate moisture meters) often lets you handle flood cleanup and water removal/extraction yourself safely and affordably. 
      Call us 24/7 if you need fast delivery to Palm Coast, Daytona Beach, St. Augustine, or surrounding areas!
    </p>
    <a href="tel:3865971132" class="cta inline-block px-12 py-6 text-xl rounded-xl font-bold shadow-lg mt-8">
      CALL 386-597-1132 NOW
    </a>
  </div>
</section>

<!-- FAQ -->
<section class="max-w-6xl mx-auto px-6 py-20">
<h2 class="text-4xl md:text-5xl font-extrabold text-center mb-16 text-[var(--primary)]">Frequently Asked Questions</h2>
<div class="space-y-12">
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">How do I know the extent of my water damage?</h3>
    <p class="text-lg text-gray-700">We provide a free thermal imaging damage assessment scan at the time of your professional water damage equipment delivery to help you assess the severity of your water damage scope of work.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">How long will it take to dry?</h3>
    <p class="text-lg text-gray-700">Average drying time is 3-5 days for common materials like carpet and drywall depending on the severity of the water intrusion, the permeability of the structure's coatings and other conditions, and atmospheric factors.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">How will I know when it's dry?</h3>
    <p class="text-lg text-gray-700">We rent professional non-destructive water damage moisture meters that are very easy to use by placing on the wall and reading a numerical digital display. Place it on a dry part of one of your walls in your structure to determine a dry standard number in your structure. Then you can use that number for your drying goals to bring your structure back to pre-loss condition.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">How does the drying process work?</h3>
    <p class="text-lg text-gray-700">In laymen’s terms, the air movers blow moisture from water-damaged affected materials, then our commercial-size dehumidifiers capture and remove moisture while producing hot dry air to speed up the drying process.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">Do you set equipment up?</h3>
    <p class="text-lg text-gray-700">Yes, we offer a set-up/take-down option. We can help you determine your scope of work and set up equipment per the scope and take down and pick up when you are done.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">Do you extract water?</h3>
    <p class="text-lg text-gray-700">Yes, we offer emergency 24/7 water extraction option. We will extract the water for you with our high-volume specialty water extraction units at the time of the professional water damage equipment delivery so you can start your water damage flood clean-up drying and begin to bring your life back to normal.</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">Do you provide instructions on how to use the rental equipment?</h3>
    <p class="text-lg text-gray-700">Yes our friendly team will show you how to operate the rented water damage clean up and dry out equipment</p>
  </div>
  <div class="card p-10">
    <h3 class="text-2xl font-bold mb-6 text-[var(--primary)]">How do I prepare my space for equipment?</h3>
    <p class="text-lg text-gray-700">Clear the water damage affected area so water extraction can be performed efficiently then water damage clean up equipment can be placed to begin the dry out process</p>
  </div>
</div>
</section>
<!-- REVIEWS -->
<section class="max-w-7xl mx-auto px-6 py-20">
<h2 class="text-4xl font-extrabold text-center mb-12 text-[var(--primary)]">Customer Reviews</h2>
<div class="grid md:grid-cols-3 gap-8">
<div class="card p-8">
<div class="flex items-center gap-5 mb-6">
<img src="https://thumbs.dreamstime.com/b/successful-mature-man-smiling-looking-away-50397519.jpg" alt="Mike R." class="review-img" loading="lazy">
<div>
<div class="flex text-yellow-500 text-2xl">★★★★★</div>
<p class="font-bold text-lg text-[var(--primary)]">Mike R.</p>
</div>
</div>
<p class="italic text-gray-700">"Called late at night after a pipe burst. Equipment arrived quickly and the thermal scan helped spot hidden moisture. Great value doing it DIY—staff was very helpful."</p>
<p class="mt-6 text-base font-semibold text-gray-600">Palm Coast</p>
</div>
<div class="card p-8">
<div class="flex items-center gap-5 mb-6">
<img src="https://thumbs.dreamstime.com/b/happy-beautiful-head-shot-portrait-attractive-gen-z-female-cheerful-high-school-student-successful-businesswoman-satisfied-404791308.jpg" alt="Sarah T." class="review-img" loading="lazy">
<div>
<div class="flex text-yellow-500 text-2xl">★★★★★</div>
<p class="font-bold text-lg text-[var(--primary)]">Sarah T.</p>
</div>
</div>
<p class="italic text-gray-700">"The dehus and fans worked great for our flooded area. Much cheaper than full restoration—would recommend to anyone."</p>
<p class="mt-6 text-base font-semibold text-gray-600">Daytona Beach</p>
</div>
<div class="card p-8">
<div class="flex items-center gap-5 mb-6">
<img src="https://thumbs.dreamstime.com/b/portrait-smiling-middle-aged-bearded-man-desk-happy-my-client-satisfied-133418672.jpg" alt="John M." class="review-img" loading="lazy">
<div>
<div class="flex text-yellow-500 text-2xl">★★★★★</div>
<p class="font-bold text-lg text-[var(--primary)]">John M.</p>
</div>
</div>
<p class="italic text-gray-700">"Emergency delivery was prompt after storm damage. Easy to use the gear and pickup was simple. Saved a lot compared to hiring a big company—thanks DIYDRY!"</p>
<p class="mt-6 text-base font-semibold text-gray-600">St. Augustine</p>
</div>
</div>
</section>
<!-- SERVICE AREAS -->
<section class="py-20 px-6 max-w-7xl mx-auto">
<h2 class="text-4xl md:text-5xl font-extrabold text-center mb-12 text-[var(--primary)]">Service Areas</h2>
<div class="grid md:grid-cols-3 gap-8">
<div class="card p-8">
<h3 class="text-2xl font-extrabold mb-5 text-[var(--primary)]">Volusia County</h3>
<p class="text-base text-gray-700">
Daytona Beach, Ormond Beach, Port Orange, Deltona, DeLand, New Smyrna Beach, Edgewater<br><br>
Unincorporated: DeLeon Springs, Osteen, Samsula, Seville, Pierson
</p>
</div>
<div class="card p-8">
<h3 class="text-2xl font-extrabold mb-5 text-[var(--primary)]">Flagler County</h3>
<p class="text-base text-gray-700">
Palm Coast, Flagler Beach, Bunnell<br><br>
Unincorporated: Hammock, Espanola, Dupont
</p>
</div>
<div class="card p-8">
<h3 class="text-2xl font-extrabold mb-5 text-[var(--primary)]">St. Johns County</h3>
<p class="text-base text-gray-700">
St. Augustine, St. Augustine Beach, Ponte Vedra, Nocatee, Hastings<br><br>
Unincorporated: Elkton, Switzerland, Tocoi
</p>
</div>
</div>
</section>
<!-- CONTACT -->
<section id="contact" class="py-24 bg-[var(--primary)] text-white text-center">
<p class="text-5xl font-extrabold text-red-400">386-597-1132</p>
<a href="tel:3865971132" class="cta px-14 py-8 mt-8 inline-block text-2xl font-bold rounded-xl shadow-2xl">
CALL NOW
</a>
<!-- Realistic 5-star reviews in map box -->
<div class="mt-10 max-w-4xl mx-auto grid md:grid-cols-3 gap-6 text-left text-sm">
  <div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
    <div class="flex text-yellow-400 text-xl mb-2">★★★★★</div>
    <p class="italic">"Fast delivery and great equipment! Saved me thousands vs calling a big company."</p>
    <p class="mt-2 font-semibold">— Lisa P., Palm Coast</p>
  </div>
  <div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
    <div class="flex text-yellow-400 text-xl mb-2">★★★★★</div>
    <p class="italic">"Thermal scan caught hidden moisture we never saw. Highly recommend DIYDRY!"</p>
    <p class="mt-2 font-semibold">— Robert K., Daytona Beach</p>
  </div>
  <div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
    <div class="flex text-yellow-400 text-xl mb-2">★★★★★</div>
    <p class="italic">"24/7 service was a lifesaver after the storm. Equipment was pro-grade and easy to use."</p>
    <p class="mt-2 font-semibold">— Emily S., St. Augustine</p>
  </div>
</div>
<!-- Centered Google Maps embed -->
<div class="mt-12 max-w-4xl mx-auto">
  <iframe
    src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d114000!2d-81.250!3d29.550!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x88e7c0f8f8f8f8f8%3A0x8f8f8f8f8f8f8f8f!2sPalm%20Coast%2C%20FL%2C%20USA!5e0!3m2!1sen!2sus!4v1690000000000!5m2!1sen!2sus"
    width="100%"
    height="400"
    style="border:0;"
    allowfullscreen=""
    loading="lazy"
    referrerpolicy="no-referrer-when-downgrade">
  </iframe>
</div>
</section>
<!-- MINI SHOPPING CART (Floating) -->
<div id="mini-cart">
  <h3 class="text-xl font-bold text-[var(--primary)]">Your Rental Cart</h3>
  <ul id="cart-items"></ul>
  <p id="cart-total" class="text-lg font-bold text-[var(--cta)]">Total (per day): $0.00</p>
  <a href="#equipment" onclick="document.getElementById('mini-cart').style.display='none';" class="block text-center text-[var(--accent)] font-bold mt-4 hover:underline">View Cart & Reserve →</a>
</div>
<!-- PROFESSIONAL SEO-OPTIMIZED FOOTER -->
<footer class="bg-[var(--primary)] text-white py-16">
  <div class="max-w-7xl mx-auto px-6 grid md:grid-cols-3 gap-12">
    <div>
      <div class="flex items-center gap-4 mb-6">
        <svg width="48" height="48" viewBox="0 0 52 52">
          <path d="M26 6C18 6 10 14 10 26C10 38 26 48 26 48C26 48 42 38 42 26C42 14 34 6 26 6Z" fill="#0099cc"/>
        </svg>
        <div>
          <div class="text-3xl font-extrabold">DIYDRY</div>
          <div class="text-base">Water Damage Equipment Rental</div>
        </div>
      </div>
      <p class="mb-6 text-lg">24/7 Emergency Equipment Delivery & Rental in Florida</p>
      <p class="text-3xl font-bold text-[var(--accent)]">386-597-1132</p>
      <p class="mt-4 text-base">Call now for fast delivery of dehumidifiers, air movers, and drying equipment.</p>
    </div>
    <div>
      <h4 class="text-xl font-bold mb-6">Quick Links</h4>
      <ul class="space-y-4 text-base">
        <li><a href="#home" class="hover:text-[var(--accent)] transition">Home</a></li>
        <li><a href="#equipment" class="hover:text-[var(--accent)] transition">Equipment Rental</a></li>
        <li><a href="#calculator" class="hover:text-[var(--accent)] transition">Drying Equipment Calculator</a></li>
        <li><a href="#book" class="hover:text-[var(--accent)] transition">Book Now</a></li>
        <li><a href="#contact" class="hover:text-[var(--accent)] transition">Contact</a></li>
      </ul>
    </div>
    <div>
      <h4 class="text-xl font-bold mb-6">Service Areas</h4>
      <ul class="space-y-4 text-base">
        <li><strong>Flagler County:</strong> Palm Coast, Flagler Beach, Bunnell water damage equipment rental</li>
        <li><strong>Volusia County:</strong> Daytona Beach, Ormond Beach, Port Orange, Deltona dehumidifier rental</li>
        <li><strong>St. Johns County:</strong> St. Augustine, Ponte Vedra, Nocatee air mover rental</li>
      </ul>
    </div>
  </div>
  <div class="mt-12 border-t border-gray-700 pt-8 text-center text-base">
    <p>Serving Palm Coast, Daytona Beach, St. Augustine, and surrounding Florida areas with 24/7 emergency water damage equipment rental • Dehumidifiers • Air Movers • Moisture Meters</p>
  </div>
  <!-- Social media icons stationary at bottom-right of footer -->
  <div style="margin-top: 2rem; display: flex; justify-content: flex-end; gap: 16px; padding: 0 1.5rem;">
    <a href="https://www.facebook.com/diydryrental" target="_blank" rel="noopener" style="background:#1877f2; color:white; width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(0,0,0,0.3);">
      <span style="font-size:20px; font-weight:bold;">f</span>
    </a>
    <a href="https://twitter.com/diydryrental" target="_blank" rel="noopener" style="background:#000; color:white; width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(0,0,0,0.3);">
      <span style="font-size:20px; font-weight:bold;">X</span>
    </a>
    <a href="https://www.instagram.com/diydryrental" target="_blank" rel="noopener" style="background:#E1306C; color:white; width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(0,0,0,0.3);">
      <span style="font-size:20px;">📸</span>
    </a>
    <a href="https://www.linkedin.com/company/diydryrental" target="_blank" rel="noopener" style="background:#0a66c2; color:white; width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(0,0,0,0.3);">
      <span style="font-size:20px; font-weight:bold;">in</span>
    </a>
  </div>
  <div class="mt-6 text-center text-sm">
    © <script>document.write(new Date().getFullYear());</script> DIYDRY Water Damage Equipment Rental. All rights reserved.
  </div>
</footer>
<script>
// Prevent body scroll when mobile menu is open
const hamburger = document.getElementById('hamburger');
const mobileMenu = document.getElementById('mobile-menu');
const closeMenu = document.getElementById('close-menu');
hamburger.addEventListener('click', function() {
  mobileMenu.classList.add('show');
  this.classList.add('open');
  document.body.style.overflow = 'hidden';
});
closeMenu.addEventListener('click', function() {
  mobileMenu.classList.remove('show');
  hamburger.classList.remove('open');
  document.body.style.overflow = '';
});
mobileMenu.addEventListener('click', function(e) {
  if (e.target === this) {
    this.classList.remove('show');
    hamburger.classList.remove('open');
    document.body.style.overflow = '';
  }
});
// Calculator
function calc(){
  let area = parseFloat(document.getElementById("area").value);
  let cls = document.querySelector('input[name="class"]:checked')?.value;
  let ceiling = document.querySelector('input[name="ceiling"]:checked')?.value;
  if(!area || !cls || !ceiling || area <= 0){
    document.getElementById("result").innerHTML =
    "<p class='text-lg font-extrabold mb-2'>Amount of Equipment Recommended by IICRC S500 Standard</p>Please complete all fields with valid positive numbers";
    return;
  }
  let dehu = 0;
  if(cls == 2 && ceiling == 10) dehu = Math.ceil(area / 640);
  if(cls == 2 && ceiling == 8) dehu = Math.ceil(area / 800);
  if(cls == 3 && ceiling == 10) dehu = Math.ceil(area / 512);
  if(cls == 3 && ceiling == 8) dehu = Math.ceil(area / 640);
  // Air movers base calculation
  let addLow = area / 50;
  let addHigh = area / 70;
  let airLow = Math.ceil(1 + addLow);
  let airHigh = Math.ceil(1 + addHigh);
  let insetsExtra = parseInt(document.getElementById('insets-count').value) || 0;
  let offsetsExtra = parseInt(document.getElementById('offsets-count').value) || 0;
  let totalExtra = insetsExtra + offsetsExtra;
  let airTotal = Math.max(airLow, airHigh) + totalExtra;
  let airExplanation = `Total: 1 (room) + ${addLow.toFixed(1)}-${addHigh.toFixed(1)} (floor) = ${addLow.toFixed(1)} to ${addHigh.toFixed(1)} air movers.<br>Additional: ${totalExtra} extra (${insetsExtra} insets + ${offsetsExtra} offsets > 18 inches)`;
  document.getElementById("result").innerHTML =
  "<p class='text-lg font-extrabold mb-2'>Amount of Equipment Recommended by IICRC S500 Standard</p>" +
  airTotal + " Air Movers<br>" +
  "<span class='text-base font-normal text-gray-700 block mt-2'>" + airExplanation + "</span>" +
  dehu + " Dehumidifiers";
}
// Shopping Cart Logic
let cart = [];
let rentalDays = 1;
const TAX_RATE = 0.07;
const PROTECTION_RATE = 0.15;
function addToCart(name, price) {
  const existing = cart.find(item => item.name === name);
  if (existing) {
    existing.quantity += 1;
  } else {
    cart.push({ name, price, quantity: 1 });
  }
  updateCartDisplay();
  updateFullCartDisplay();
}
function changeQuantity(name, delta) {
  const item = cart.find(i => i.name === name);
  if (item) {
    item.quantity = Math.max(1, item.quantity + delta);
    updateCartDisplay();
    updateFullCartDisplay();
  }
}
function updateCartDisplay() {
  const cartItems = document.getElementById('cart-items');
  const cartTotal = document.getElementById('cart-total');
  const miniCart = document.getElementById('mini-cart');
  cartItems.innerHTML = '';
  let total = 0;
  cart.forEach(item => {
    const li = document.createElement('li');
    li.textContent = `${item.name} x${item.quantity} - $${(item.price * item.quantity).toFixed(2)}`;
    cartItems.appendChild(li);
    total += item.price * item.quantity;
  });
  cartTotal.textContent = `Total (per day): $${total.toFixed(2)}`;
  miniCart.style.display = cart.length > 0 ? 'block' : 'none';
}
function updateFullCartDisplay() {
  const fullItems = document.getElementById('full-cart-items');
  const subtotalDisplay = document.getElementById('subtotal-display');
  const protectionDisplay = document.getElementById('protection-fee-display');
  const taxDisplay = document.getElementById('tax-display');
  const fullTotalDisplay = document.getElementById('full-cart-total');
  const daysDisplay = document.getElementById('days-display');
  fullItems.innerHTML = '';
  let subtotal = 0;
  let protectionFee = 0;
  const acceptProtection = document.getElementById('protect-accept').checked;
  if (cart.length === 0) {
    fullItems.innerHTML = '<p class="text-center text-gray-600 text-lg">Your cart is empty.</p>';
    subtotalDisplay.textContent = `Subtotal: $0.00`;
    protectionDisplay.textContent = `Damage Protection (15%): $0.00`;
    taxDisplay.textContent = `Tax (7%): $0.00`;
    fullTotalDisplay.textContent = `Grand Total: $0.00`;
  } else {
    cart.forEach(item => {
      const itemSub = item.price * item.quantity * rentalDays;
      subtotal += itemSub;
      if (acceptProtection) {
        protectionFee += itemSub * PROTECTION_RATE;
      }
      const div = document.createElement('div');
      div.className = 'flex justify-between items-center py-4 border-b';
      div.innerHTML = `
        <div class="flex items-center">
          <button class="qty-btn" onclick="changeQuantity('${item.name}', -1)">-</button>
          <span class="mx-4 font-semibold text-lg">${item.quantity}</span>
          <button class="qty-btn" onclick="changeQuantity('${item.name}', 1)">+</button>
          <span class="ml-6 text-lg">${item.name} × ${rentalDays} day${rentalDays !== 1 ? 's' : ''}</span>
        </div>
        <span class="text-lg font-semibold">$${itemSub.toFixed(2)}</span>
      `;
      fullItems.appendChild(div);
    });
  }
  const taxableAmount = subtotal + protectionFee;
  const tax = taxableAmount * TAX_RATE;
  const grandTotal = taxableAmount + tax;
  daysDisplay.textContent = `Rental Days: ${rentalDays} (select dates above)`;
  subtotalDisplay.textContent = `Subtotal: $${subtotal.toFixed(2)}`;
  protectionDisplay.textContent = `Damage Protection (15%): $${protectionFee.toFixed(2)}`;
  taxDisplay.textContent = `Tax (7%): $${tax.toFixed(2)}`;
  fullTotalDisplay.textContent = `Grand Total: $${grandTotal.toFixed(2)}`;
}
function calculateDays() {
  const startInput = document.getElementById('start-date');
  const endInput = document.getElementById('end-date');
  const start = startInput.value ? new Date(startInput.value) : null;
  const end = endInput.value ? new Date(endInput.value) : null;
  if (start && end && end >= start) {
    const diffTime = Math.abs(end - start);
    rentalDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1;
  } else {
    rentalDays = 1;
  }
  if (start) {
    endInput.min = startInput.value;
  }
  updateFullCartDisplay();
}
document.getElementById('start-date').addEventListener('change', calculateDays);
document.getElementById('end-date').addEventListener('change', calculateDays);
// Square Payment Initialization
let payments;
let card;
async function initializeSquare() {
  try {
    payments = Square.payments('sandbox-sq0idb-YourSandboxApplicationIdHere', 'Lsandbox-sq0csb-YourLocationIdHere');
    card = await payments.card();
    await card.attach('#card-container');
  } catch (e) {
    console.error(e);
    document.getElementById('card-errors').innerText = 'Failed to load Square payment form. Please try again later.';
  }
}
initializeSquare();
document.getElementById('proceed-checkout').addEventListener('click', async (e) => {
  e.preventDefault();
  if (cart.length === 0) {
    alert("Your cart is empty!");
    return;
  }
  if (rentalDays < 1) {
    alert("Please select valid rental dates.");
    return;
  }
  const form = document.getElementById('checkout-form');
  if (!form.checkValidity()) {
    form.reportValidity();
    return;
  }
  let subtotal = 0;
  let protectionFee = 0;
  const acceptProtection = document.getElementById('protect-accept').checked;
  cart.forEach(item => {
    const itemSub = item.price * item.quantity * rentalDays;
    subtotal += itemSub;
    if (acceptProtection) protectionFee += itemSub * 0.15;
  });
  const taxableAmount = subtotal + protectionFee;
  const tax = taxableAmount * TAX_RATE;
  const grandTotal = taxableAmount + tax;
  try {
    const result = await card.tokenize();
    if (result.status === 'OK') {
      const token = result.token;
      alert(`Card tokenized successfully!\nToken: ${token}\nSubtotal: $${subtotal.toFixed(2)}\nProtection (15%): $${protectionFee.toFixed(2)}\nTax: $${tax.toFixed(2)}\nGrand Total: $${grandTotal.toFixed(2)}\n\nIn production: Send token to backend for Square payment.`);
    } else {
      document.getElementById('card-errors').innerText = result.errors.map(err => err.message).join(', ');
    }
  } catch (err) {
    document.getElementById('card-errors').innerText = 'Payment processing failed. Please try again.';
    console.error(err);
  }
});
updateFullCartDisplay();


×

Your Rental Cart

View Cart & Reserve →