{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/dNl8mr7YqCdTndH6ubbC/bGTZQTE5kCwMPPAOu6Pn/GECS0TnHB.js"],
  "sourcesContent": ["// Generated by Framer (5012657)\nexport default function metadata(params,activeLocale){return{breakpoints:[{hash:\"17hbhuk\",mediaQuery:\"(min-width: 1200px)\"},{hash:\"1lo1fny\",mediaQuery:\"(min-width: 810px) and (max-width: 1199px)\"},{hash:\"1xnz7ic\",mediaQuery:\"(max-width: 809px)\"}],customHTMLHeadEnd:\"<script>\\n  window.PAGE_REQUIRES = ['calculator', 'library', 'admin'];\\n</script>\\n\\n<!-- Protection script (paste the minimal version from above) -->\\n<style>\\n  /* Smooth auth transitions */\\n  body {\\n    opacity: 0;\\n    transition: opacity 0.3s ease;\\n  }\\n  body.auth-ready {\\n    opacity: 1;\\n  }\\n</style>\\n\\n<script>\\n(async function() {\\n  // Get page access requirements from window.PAGE_REQUIRES or path\\n  const currentPath = window.location.pathname;\\n  const requiredLevels = window.PAGE_REQUIRES || \\n    Object.entries(window.PAGE_ACCESS || {})\\n      .find(([path]) => currentPath.includes(path))?.[1] || [];\\n  \\n  if (requiredLevels.length === 0) {\\n    // Not a protected page\\n    document.body.classList.add('auth-ready');\\n    return;\\n  }\\n  \\n  try {\\n    // Handle magic link if present\\n    await window.authManager.handleAuthParams();\\n    \\n    // Check authentication (use prefetched if available)\\n    const { session, profile } = window.authPromise \\n      ? await window.authPromise \\n      : await window.authManager.checkAuth();\\n    \\n    if (!session) {\\n      window.authManager.redirect('/login');\\n      return;\\n    }\\n    \\n    // Check access level\\n    if (!window.authManager.canAccess(requiredLevels)) {\\n      window.authManager.redirect('/login?error=insufficient_access');\\n      return;\\n    }\\n    \\n    // Success - show page\\n    document.body.classList.add('auth-ready');\\n    \\n  } catch (error) {\\n    console.error('Auth error:', error);\\n    window.authManager.redirect('/login?error=auth_error');\\n  }\\n})();\\n</script>\",description:\"Calculate temperature profiles along pipes with Thermobreak insulation, comparing insulated performance to uninsulated baseline.\",elements:{},framerSearch:{index:false},robots:\"noindex\",serializationId:\"framer-Bb22l\",title:\"Temperature Profiles Pipe Calculator | Thermobreak \",viewport:\"width=device-width\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "AACe,SAARA,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,UAAU,WAAW,qBAAqB,EAAE,CAAC,KAAK,UAAU,WAAW,4CAA4C,EAAE,CAAC,KAAK,UAAU,WAAW,oBAAoB,CAAC,EAAE,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAA8iD,YAAY,mIAAmI,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,EAAK,EAAE,OAAO,UAAU,gBAAgB,eAAe,MAAM,sDAAsD,SAAS,oBAAoB,CAAE,CAAQ,IAAMC,EAAgB,EACzoEC,EAAqB,CAAC,QAAU,CAAC,QAAU,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,gBAAkB,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,mBAAqB,CAAC,KAAO,UAAU,CAAC,CAAC",
  "names": ["metadata", "params", "activeLocale", "metadataVersion", "__FramerMetadata__"]
}
