
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Chicago General Contractor — Remodeling, Roofing &amp; Concrete | OnSite</title>
  <link rel="canonical" href="https://onsitegeneralcontracting.com/">
  <link rel="manifest" href="/assets/manifest-7OBDtqAd.json">
  <meta name="theme-color" content="#0A0A0A">
  <meta name="description" content="OnSite General Contracting — licensed &amp; insured general contractor serving Chicago &amp; Chicagoland. Remodeling, roofing, concrete, flooring and more. Request a free estimate.">
  <meta name="robots" content="index, follow">
  <!-- Open Graph / social (og:image = hero, pending image-engine; text tags live now) -->
  <meta property="og:type" content="website">
  <meta property="og:site_name" content="OnSite General Contracting">
  <meta property="og:title" content="Chicago General Contractor — Remodeling, Roofing &amp; Concrete | OnSite">
  <meta property="og:description" content="Licensed &amp; insured general contractor serving Chicago &amp; Chicagoland. Remodeling, roofing, concrete, flooring and more. Request a free estimate.">
  <meta property="og:url" content="https://onsitegeneralcontracting.com/">
  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="Chicago General Contractor — Remodeling, Roofing &amp; Concrete | OnSite">
  <meta name="twitter:description" content="Licensed &amp; insured general contractor serving Chicago &amp; Chicagoland. Free estimate on remodeling, roofing, concrete &amp; more.">
  <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='6' fill='%23FBBF24'/%3E%3Ctext x='16' y='22' font-family='Arial' font-weight='900' font-size='16' text-anchor='middle' fill='%230A0A0A'%3EOn%3C/text%3E%3C/svg%3E">
  <script src="https://cdn.tailwindcss.com"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  <style>
    @keyframes float {
      0%, 100% { transform: translateY(0px) scale(1); }
      50% { transform: translateY(-15px) scale(1.02); }
    }
    .animate-float {
      animation: float 6s ease-in-out infinite;
    }
    .glass-morphism {
      background: rgba(15, 23, 42, 0.6);
      backdrop-filter: blur(20px);
      border: 1px solid rgba(255, 255, 255, 0.08);
      box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
    }
    body {
      background: #0a0a0a;
      color: white;
      min-height: 100vh;
      margin: 0;
      overflow-x: hidden;
    }
    .custom-scrollbar::-webkit-scrollbar {
      width: 4px;
    }
    .custom-scrollbar::-webkit-scrollbar-track {
      background: transparent;
    }
    .custom-scrollbar::-webkit-scrollbar-thumb {
      background: rgba(255, 255, 255, 0.1);
      border-radius: 10px;
    }
    .custom-scrollbar::-webkit-scrollbar-thumb:hover {
      background: rgba(255, 255, 255, 0.2);
    }
    ::selection {
      background: #FBBF24;
      color: #0a0a0a;
    }
  </style>

<link rel="stylesheet" href="/index.css">
<script type="importmap">
{
  "imports": {
    "@google/genai": "https://esm.sh/@google/genai@^1.38.0",
    "react/": "https://esm.sh/react@^19.2.3/",
    "react": "https://esm.sh/react@^19.2.3",
    "react-dom/": "https://esm.sh/react-dom@^19.2.3/",
    "framer-motion": "https://esm.sh/framer-motion@^11.1.7",
    "next/": "https://esm.sh/next@^16.1.6/",
    "@sentry/nextjs": "https://esm.sh/@sentry/nextjs@^8.0.0",
    "react-google-autocomplete": "https://esm.sh/react-google-autocomplete@^2.7.3"
  }
}
</script>
  <script type="module" crossorigin src="/assets/index-CQeUzRBP.js"></script>
</head>
<body>
  <div id="root"></div>
</body>
</html>
